gopprof

How to continously profile my go application?


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?


Solution

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

    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.