关于Go转载提示的剖析

29 阅读1分钟

几个月前,我们开始注意到与我们认为有关的问题,并最终通过我们的NewRelic/AWS CloudWatch仪表盘证实了这些问题是内存泄漏,这很快让我想起了我参加Bill Kennedy的高级围棋研讨会的时候,他描述了剖析代码的不同方法,在那个时候,用于可视化配置文件的Web UI还没有真正正式发布。顺便说一句,我强烈建议你参加Bill的任何演讲和/或研讨会,他们都是非常棒的!

Go中的剖析让我想起了15年前我在第一份工作中剖析C程序时的美好时光,有趣的是,除了基于HTTP的剖析之外,用户体验并没有什么变化。

对于Go来说,有一些很好的官方资源来熟悉这个生态系统,特别是。

但也许缺少的关键是pprof 文档,那里的细节解释得更好一些,更不用说真正有用的选项,即使用 -diff_base.

对于http程序来说,要使用的重要一点是你的http mux中定义在net/http/pprof 的处理程序。例如,使用gorilla.Mux做以下事情就足够了。

import "net/http/pprof"

// ... some other relevant code here ...

router.PathPrefix("/debug/pprof/").HandlerFunc(pprof.Index)

理想情况下,/debug/pprof/ 是在某种 Auth 服务后面,以避免泄露专有的源代码。