程序经常出现OOM错误,然后关键字"go pprof"搜到文章<Go程序性能分析pprof>,该文章第二步说运行程序后会生成profile文件,但是编译运行后发现生成的profile文件大小一直为0,然后关键字"go pprof profile is empty"搜到文章<Golang pprof heap profile is empty>,该文章说在运行程序前添加环境变量GODEBUG="memprofilerate=1",但是好像并没有用处。
然后还是之前的关键字"go pprof"搜到文章<使用golang的pprof包对程序进行性能分析>,该文章指出"在代码中使用pprof了,实际运用中分三种情况",因为程序并非是运行一次就退出,而是作为一个服务,所以"需要开启一个goroutine来开启端口监听",然后参考文章<go内存泄露case>,注意第二步"(2)memory profile"的描述"使用--alloc_space可以显示所有分配的对象",当使用web命令时会报错"Cannot find dot, have you installed Graphviz?",然后关键字"centos Graphviz"搜到文章<Linux Centos7安装配置画图工具Graphviz>,参照该文章安装了Graphviz但是web命令依然会报错"xdg-open: no method available for opening ‘/tmp/pprof-964683453/pprof001.svg‘",不知道为什么就只好把临时的svg文件拷贝到windows下用ie来看,不理解为什么后面curl -T来拷贝时说该文件不存在。
如果程序代码中没有`import _ "net/http/pprof"`,则执行"go tool pprof http://localhost:6060/debug/pprof/heap"会报错"server response: 404 Not Found"。关键字"inuse_space"搜到文章<golang 内存分析/动态追踪>
原文地址:https://www.cnblogs.com/wongdu2014/p/9123238.html