如何利用 pprof 查询 go 内存占用

原创
2019/12/24 14:14
阅读数 9.1K

最近领导看到某个服务的内存占用很高,吩咐我查一下是啥问题。

前提

  1. 服务引用了 pprof 包
import (
	_ "runtime/pprof"
)
  1. 监听了 http 端口
err := http.ListenAndServe(fmt.Sprintf(":%d", listenPort+1), nil)
if err != nil {
	fmt.Println("srv http listen err", err.Error())
}

导出 pprof 文件

如果以上两个前提都满足,就可以导出 pprof 的 heap 文件。

在服务器上直接下载即可。

wget 127.0.0.1:8121/debug/pprof/heap

生成可视化网页

接下来就是用 pprof 解析 heap 文件。

pprof -http=:8080 /path/to/heap
// or
go tool pprof -http=:8080 /path/to/heap

分析

打开浏览器,访问 8080 端口,结果一目了然了。

原来是缓存啊,那没事。

参考资料

https://blog.detectify.com/2019/09/05/how-we-tracked-down-a-memory-leak-in-one-of-our-go-microservices/

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部