Day3 pprof性能調優筆記 | 青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
什麼是pprof? pprof是一個go自帶的性能分析工具,可以對運行的服務進行數據採樣,然後開發者可以就採樣的數據對程序的cpu佔用、內存佔用等資源消耗情況進行直觀的分析
如何啓用pprof?
在入口文件main.go
的import列表中加入net/http/pprof
即可
import (
_ "net/http/pprof"
)
然後添加一個函數
func PprofDebug() {
runtime.GOMAXPROCS(1) // 限制 CPU 使用数,避免过载
runtime.SetMutexProfileFraction(1) // 开启对锁调用的跟踪
runtime.SetBlockProfileRate(1) // 开启对阻塞操作的跟踪
go func() {
// 启动一个 http server,注意 pprof 相关的 handler 已经自动注册过了
if err := http.ListenAndServe(":6060", nil); err != nil {
log.Fatal(err)
}
os.Exit(0) }()
}
這個函數啓動了一個http服務器,然後pprof會給這個服務器進行服務注入 然後在main函數的開頭調用這個函數就行了
之後讓瀏覽器訪問http://localhost:6060/debug/pprof/
可以看到dashboard頁面
其中
cmdline
(獲取程序啓動命令以及參數) trace
(獲取程序運行的跟蹤信息) threadcreate
(獲取系統的線程創建情況的採樣信息)都不太實用
使用go tool pprof
可以對pprof獲取的採樣信息得到直觀的展現
其命令格式爲
go tool pprof http://<host>:<port>/debug/pprof/<profile> -seconds [采样间隔时间数字]
此外還可以使用pprof對數據採樣生成網頁
go tool pprof -http=:8081 http://<host>:<port>/debug/pprof/<profile>
之後就可以訪問http://localhost:8081/ui/flamegraph
查看火焰圖了
排查cpu的佔用
使用命令進入一個交互式終端
go tool pprof http://<host>:<port>/debug/pprof/profile
進入交互式終端之後就可以輸入top
命令獲取cpu資源佔用情況
可以看到佔用最高的是哪個函數
輸入命令
list <Function Name>
就可以查看相關代碼的運行耗時詳情
通過耗時詳情就可以定位到性能損耗最嚴重的地方了
排查內存佔用
這裏需要先安裝一個命令行工具graphviz
,安裝方式可以到其官網查看
有了graphviz之後,就可以在pprof的交互界面中使用web
svg
等命令生成數據可視化圖片,進行更直觀的排查
輸入命令
go tool pprof http://<host>:<port>/debug/pprof/heap
就可以進入交互式界面排查內存佔用問題
和排查cpu佔用一樣,這裏也是使用top
和list
命令排查代碼的內存佔用情況
佔用詳情會顯示出佔用的內存是多少
此時可以輸入web
命令獲取一張圖片來查看資源佔用的詳情
內存回收檢查
通過設置GODEBUG=gctrace=1
可以在程序運行時輸出gc的相關日誌
然後從日誌中截取含有gc
的內容就可以知道gc執行的頻繁程度
GODEBUG=gctrace=1 ./<filename> | grep gc
如果gc調用過於頻繁,就可以通過pprof查看內存的申請情況
go tool pprof http://<host>:<port>/debug/pprof/allocs
之後就可以使用top
,list
和web
命令查看佔用詳情了
排查協程泄漏
如果協程不斷被創建但是卻不被回收,這時就會發生內存泄漏 使用pprof還可以查看協程的佔用情況 在dashboard頁面就可以看到協程數,如果協程數過高就可以考慮用pprof排查是否發生了協程導致的內存泄漏
使用pprof進入交互界面
go tool pprof http://<host>:<port>/debug/pprof/goroutine
然後就可以用top
list
web
進行排查了
本文作者:七つ一旋桜
本文链接:https://www.cnblogs.com/poifa/p/17716925.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步