Jeffy Mathew
Jeffy Mathew

Reputation: 580

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?

Upvotes: 2

Views: 1458

Answers (2)

ilya_dt
ilya_dt

Reputation: 47

You can use pyroscope https://pyroscope.io/ with pull model. It is scraping your application continuously and putting profiling information to the UI Dashboard.

Upvotes: -1

dm03514
dm03514

Reputation: 55962

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.

Upvotes: 3

Related Questions