2

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?

sHartmann
  • 541
  • 4
  • 12
Jeffy Mathew
  • 570
  • 4
  • 16

2 Answers2

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

       }
    }
}()

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.

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