DEV Community

Mario Carrion
Mario Carrion

Posted on • Originally published at mariocarrion.com on

Go Tip: Profiling

#go

A few months ago we started noticing issues related to what we believed, and eventually confirmed due to our NewRelic/AWS CloudWatch dashboards, were memory leaks, this quickly reminded me of the time I attended Bill Kennedy's Advanced Go Workshop where he described different ways for profiling code, back at that time the web UI for visualizing profiles was not really officially released. On a side note I highly recommend you attending any of Bill's presentations and/or workshops, they are phenomenal!

Profiling in Go reminds me of the old good days when I was profiling C programs in my first job 15 years ago, it's funny how the UX hasn't changed that much really, except for the HTTP-based profiling.

For Go there are some great official resources for getting familiar with the ecosystem, specifically:

But perhaps the missing key is the pprof documentation where details are explained a little better, not to mention the really useful option to compare profiles using -diff_base.

For http programs the important bit to use is the handler defined in net/http/pprof in your http mux. For example using gorilla.Mux doing something like the following is enough:

import "net/http/pprof"

// ... some other relevant code here ...

router.PathPrefix("/debug/pprof/").HandlerFunc(pprof.Index)
Enter fullscreen mode Exit fullscreen mode

Ideally that /debug/pprof/ is behind some sort of Auth service to avoid leaking proprietary source code.


The more you know

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

Top comments (0)

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay