如何持续分析我的 go 应用程序?
How to continously profile my go application?
我的应用程序有一些内存泄漏,导致应用程序经常崩溃。所以我开始使用 pprof 分析我的应用程序,但我只能在我点击 url 的实例中获取配置文件。有没有什么方法可以每隔一段时间找到配置文件,以便我可以分析应用程序的情况?
我希望有一个很酷的标志,用于 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)
}
}
}
}()
我的应用程序有一些内存泄漏,导致应用程序经常崩溃。所以我开始使用 pprof 分析我的应用程序,但我只能在我点击 url 的实例中获取配置文件。有没有什么方法可以每隔一段时间找到配置文件,以便我可以分析应用程序的情况?
我希望有一个很酷的标志,用于 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)
}
}
}
}()