这是我参与第五届青训营伴学笔记创作活动的第4天。该文章是对go的性能测试工具prof的总结。
使用pprof
- 在main函数中导入 “net/http/pprof”,将服务监听端口设置和pprof端口一样(通常为6060)。
- 可以访问链接http://localhost:6060/debug/pprof/ 看到程序的采样数据。分别是:
- allocs:内存分配情况采样
- blocks:阻塞情况采样
- cmdline:程序启动命令参数
- groutain:当前所有协程的堆栈信息
- heap:堆内存使用情况
- mutex:锁竞争情况
- profile:cpu使用情况
- threadcreate:系统线程创建情况
- trace:程序运行跟踪信息
排查cpu占用过高
启动服务,然后命令行输入命令 go tool pprof "http://localhost:6060/debug/pprof/profile"。
之后进入交互式终端。
- top命令用来查看占用cpu较高的函数。
- flat:本函数的物理耗时(不包括函数调用)。
- flat%:flat/总运行时间。
- cum:函数内所有操作的物理耗时。cum一般是次关注的,结合flat来看。flat可以知道哪个函数耗时多,cum让我们知道哪些函数调用了这些费时的函数。
- cum%:cum/总运行时间
- sum:这一行上面所有flat相加
- sum%:这一行上面所有flat%相加
- 找到占用cpu高度函数
F,输入命令list F定位到函数具体位置。
排查内存占用过高
启动服务,然后命令行输入命令 go tool pprof "http://localhost:6060/debug/pprof/heap"。
之后进入交互式终端。同cpu排查一样,top查看内存占用高的函数,list定位到代码具体位置。
排查频繁内存回收
启动服务,然后命令行输入命令 go tool pprof "http://localhost:6060/debug/pprof/allocs"。
之后进入交互式终端。 top查看内存分配频繁的函数,list定位到代码具体位置。
排查频繁协程泄露、锁竞争、阻塞操作
命令分别是:go tool pprof "http://localhost:6060/debug/pprof/groutain"、go tool pprof "http://localhost:6060/debug/pprof/mutex"、go tool pprof "http://localhost:6060/debug/pprof/block",之后是top,list,web大法。