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

不羁的心 提交于 2019-12-24 14:43:39

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

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

前提

  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/

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!