如何排查Go程序CPU占用过高问题
12 July 2023
前言
如果要在 golang 开发过程中进行性能调优,一般需要使用 pprof,本文介绍的是 pprof 工具使用方法。
代码示例
mport (
// 略
_ "net/http/pprof" // 会自动注册 handler 到 http server,方便通过 http 接口获取程序运行采样报告
// 略
)
func main() {
// 略
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://127.0.0.1:6060/debug/pprof/
- 命令调试:
go tool pprof http://localhost:6060/debug/pprof/profile
,然后输入top
- 可视可工具查看
go tool pprof -http=:8000 http://localhost:6060/debug/pprof/profile?debug=1
, 要先安装graphviz