go中提供了pprof包来做代码的性能监控,在两个地方有包:
- net/http/pprof
- runtime/pprof
其实net/http/pprof中只是使用runtime/pprof包来进行封装了一下,并在http端口上暴露出来。
使用 net/http/pprof 做WEB服务器的性能监控
如果你的go程序是用http包启动的web服务器,想要查看自己的web服务器的状态。这个时候就可以选择net/http/pprof。
import _ "net/http/pprof"
然后就可以在浏览器中使用http://localhost:port/debug/pprof/ 直接看到当前web服务的状态,包括CPU占用情况和内存使用情况等。
如果是 gin框架起的web服务, 那么就用这个现成的包即可: https://github.com/DeanThompson/ginpprof
如果是 beego框架起的web服务, 那再配置文件中直接开启就可以了. beego参考文档
cpu分析
命令行执行:
go tool pprof http://192.168.2.60:8101/debug/pprof/profile
然后进入30s的收集信息时间, 此30s内, 可以进行压力测试
收集结束后, 可以调用web, top等工具进行查看.
30s的默认时间可以修改, 用 --seconds 10 参数即可, 放到pprof后面, url前面
使用web遇到的错误:
Failed to execute dot. Is Graphviz installed? Error: exec: "dot": executable file not found in $PATH
这时需要安装 Graphviz 工具.具体怎么安装, 自行百度
堆栈分析
命令行执行:
go tool pprof http://192.168.2.60:8101/debug/pprof/heap
收集结束后, 可以调用web, top等工具进行查看.