My application is having some memory leaks which makes the application crash often. So I started profiling my application with pprof, but I can get the profile only at the instance I hit the url. Are there any ways to find the profile at some intervals so that I can analyze what's happening with the application?
Asked
Active
Viewed 828 times
2
-
https://golang.org/pkg/runtime/pprof/#WriteHeapProfile – Adrian Jul 01 '19 at 13:29
2 Answers
3
I was hoping that there would be a cool flag to pprof dump on exception (like core dump) but can't find anything. Pending this there are two options that come to mind:
- External: curl pprof regularly using cron or some other driver
- Internal: write pprof regularly from inside the program
External
$ curl http://localhost:8080/debug/pprof/heap > heap.0.pprof
Internal
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)
}
}
}
}()

dm03514
- 54,664
- 18
- 108
- 145
-1
You can use pyroscope https://pyroscope.io/ with pull model. It is scraping your application continuously and putting profiling information to the UI Dashboard.

ilya_dt
- 1
- 1
- 1