[笔记] 使用 pperf 观测GoLang CPU占用

[笔记] 使用 pperf 观测GoLang CPU占用

vate_room 8 2024-11-01

[笔记] 使用 pperf 观测GoLang CPU占用

代码内插入

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 {
			logrus.Error(err)
		}
		os.Exit(0)
	}()
	}

导出报告

通过交互式终端使用

go tool pprof http://localhost:6060/debug/pprof/profile?seconds=60

$ go tool pprof http://localhost:6060/debug/pprof/profile\?seconds\=60
(pprof) top10


执行该命令后,需等待 60 秒(可调整 seconds 的值),pprof 会进行 CPU Profiling。结束后将默认进入 pprof 的交互式命令模式,可以对分析的结果进行查看或导出。具体可执行 pprof help 查看命令说明

  • flat:给定函数上运行耗时
  • flat%:同上的 CPU 运行耗时总比例
  • sum%:给定函数累积使用 CPU 总比例
  • cum:当前函数加上它之上的调用运行总耗时
  • cum%:同上的 CPU 运行耗时总比例

通过 Web 界面

查看当前总览:访问 http://127.0.0.1:6060/debug/pprof/