1.结论
- Golang 自带工具监控cpu,内存比较简单,并提供可视化界面。
- 学习成本较低。
- 推荐使用。
2.是什么?
- 用于量化go语言性能而存在的分析工具
- 使用可视化工具来分析服务器运行时生成的预定格式数据
- 多种数据分析图
- golang package中自带的工具
3.有什么种类?
- Heap Profile: 内存堆栈图,用于分析内存使用率
- 30-second CPU profile: 30s内的cpu使用率,包括GC时间占比
- Goroutine Blocking Profile: goroutine的阻塞分析图,分析goroutine是否有泄漏
- 5-second executable trace: 收集5s 执行足迹
4.怎么用
启动
建立main方法并启动
package main
import (
"net/http"
_ "net/http/pprof"
)
func main() {
go func() {
http.ListenAndServe("0.0.0.0:6060",nil)
}()
}
图形化工具 - graphviz
安装后,才能正常显示go的绘图,下载地址
应用
- cmd line
- the heap profile : go tool pprof http://localhost:6060/debug/pprof/heap
- 30-second CPU profile : go tool pprof http://localhost:6060/debug/pprof/profile
- goroutine blocking profile : go tool pprof http://localhost:6060/debug/pprof/block
- website
http://localhost:6060/debug/pprof
5.内存监控
模拟程序
- 启动监控程序
- 初始化并读取内存信息
- 循环分配大内存
- 再次读取内存信息
- 通过makeMem分配大内存
如下图:
结果
其中包含:内存分配信息 与 统计基本信息
如何阅读
- 从上到下,最顶端为入口
- 方框:大:占用时间/资源比较多,小则与之相反
- 线条:粗:占用时间/资源比较多,小则与之相反
- 立方体:占用并没有释放的内存
6.cpu监控
模拟程序
- 监听监控端口
- goroutine斐波拉契数列
- 运行斐波拉契数列
如下图:
结果
其中包含:
- 占用cpu时间
- 调用链路
- 统计时长
- runtime.morestack:申请栈空间
7.与java对比
| 对比项 | Golang | Java |
|---|---|---|
| 性能工具 | 自带 | 部分自带 |
| GC信息 | 设置环境变量并重启程序 | 直接通过命令/打gc.log |
| 堆栈信息 | 侵入/清晰 | 非侵入/清晰 |
| CPU信息 | 查看成本/要求较低 | 查看成本/要求较高 |
欢迎关注我的技术公众号
加入社区
在公众号后台回复关键字【dubbogo】加入 dubbo-go 社区。