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?
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 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)
}
}
}
}()