在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
go中提供了pprof包来做代码的性能监控,在两个地方有包:
其实net/http/pprof中只是使用runtime/pprof包来进行封装了一下,并在http端口上暴露出来。 如果你的go程序是用http包启动的web服务器,想要查看自己的web服务器的状态。这个时候就可以选择net/http/pprof。 import _ "net/http/pprof" 然后就可以在浏览器中使用http://localhost:port/debug/pprof/ 直接看到当前web服务的状态,包括CPU占用情况和内存使用情况等。 当然,非WEB的也可以用下面方式启动WEB。 在 main 方法中增加 func main() { go func() { http.ListenAndServe("localhost:6060", nil) }() 下图就是访问该网址的一次截图: CPU消耗分析使用 runtime/pprof 做应用程序性能监控关键代码: import "runtime/pprof" func main() { 注意,有时候 defer f.Close(), defer pprof.StopCPUProfile() 会执行不到,这时候我们就会看到 prof 文件是空的, 我们需要在自己代码退出的地方,增加上下面两行,确保写文件内容了。 pprof.StopCPUProfile() f.Close()
对产生的文件进行分析:我们可以使用 go tool pprof (应用程序) (应用程序的prof文件) 方式来对这个 prof 文件进行分析。 $ go tool pprof HuaRongDao ./tmp/cpu.prof 一些常用 pprof 的命令: top在默认情况下,top命令会输出以本地取样计数为顺序的列表。我们可以把这个列表叫做本地取样计数排名列表。 (pprof) top 参考: https://github.com/hyper-carrot/go_command_tutorial/blob/master/0.12.md 默认情况下top命令会列出前10项内容。但是如果在top命令后面紧跟一个数字,那么其列出的项数就会与这个数字相同。
web与gv命令类似,web命令也会用图形化的方式来显示概要文件。但不同的是,web命令是在一个Web浏览器中显示它。如果你的Web浏览器已经启动,那么它的显示速度会非常快。如果想改变所使用的Web浏览器,可以在Linux下设置符号链接/etc/alternatives/gnome-www-browser或/etc/alternatives/x-www-browser,或在OS X下改变SVG文件的关联Finder。 mac 下 修改默认打开方式: 右键一个想处理的文件,按alt 键(lion)出现always open with,然后打开,整个过程中, 先右键,然后一直按 alt, 一直到打开为止。
参考资料: go tool pprof Go的pprof使用 Profiling Go Programs
内存泄漏或消耗分析关键代码 fm, err := os.OpenFile("./tmp/mem.out", os.O_RDWR|os.O_CREATE, 0644) 在我们需要生成当时的内存情况时,只需要执行上面代码即可。 触发的条件可以通过 http 的一个接口,或者退出时,或者接收到某个特殊信号,这些逻辑就需要自己实现了。 分析方法,跟之上CPU的分析方法一致。
参考资料: [golang]内存不断增长bytes.makeSlice |
请发表评论