如何连续剖析我的go应用程序?

时间:2019-06-30 15:25:38

标签: go pprof

我的应用程序内存泄漏,这经常导致应用程序崩溃。因此,我开始使用pprof对应用程序进行性能分析,但是我只能在点击url的情况下才能获取配置文件。有什么方法可以隔一定间隔查找配置文件,以便我可以分析应用程序中发生的情况吗?

1 个答案:

答案 0 :(得分:2)

我希望pprof转储时会有一个异常标志(如核心转储),但找不到任何东西。在此之前,我想到了两个选择:

  • 外部:使用cron或其他驱动程序定期卷曲pprof
  • 内部:定期从程序内部编写pprof

外部

$ curl http://localhost:8080/debug/pprof/heap > heap.0.pprof

内部

ticker := time.NewTicker(1 * time.Hour)
go func() {
    for {
       select {
        case <- ticker.C:
if err := pprof.WriteHeapProfile(f); err != nil {
            log.Fatal("could not write memory profile: ", err)
        }

       }
    }
}()

The external curl is a strategy I often take in order to get heap profiles at regular intervals in order to track/compare memory growth