felixge's notes on the various go profiling methods that are available.
Find a file
Felix Geisendörfer 8469d0af41 small updates
2021-02-09 13:16:11 +01:00
bench update 2021-02-05 10:44:43 +01:00
examples more wip code 2021-02-08 15:11:18 +01:00
sim more block profile 2021-02-05 10:44:51 +01:00
.gitignore update 2021-02-05 10:44:43 +01:00
block.md small updates 2021-02-09 13:16:11 +01:00
cpu.md small updates 2021-02-09 13:16:11 +01:00
datadog.excalidraw Datadog operation illustration 2021-01-29 12:31:01 +01:00
datadog.md disclaimers 2021-02-05 10:45:11 +01:00
datadog.png Datadog operation illustration 2021-01-29 12:31:01 +01:00
flame-abc.png start cpu note 2021-01-10 15:24:09 +01:00
flame-abc.txt start cpu note 2021-01-10 15:24:09 +01:00
goroutine-matrix.png Note about goroutines 2021-01-17 19:21:02 +01:00
goroutine.md small updates 2021-02-09 13:16:11 +01:00
heap.md small updates 2021-02-09 13:16:11 +01:00
mutex.md small updates 2021-02-09 13:16:11 +01:00
pprof.md small updates 2021-02-09 13:16:11 +01:00
profile.proto Initial pprof format notes 2021-01-09 16:12:23 +01:00
README.md disclaimers 2021-02-05 10:45:11 +01:00

go-profiler-notes

I've just started a new job at Datadog to work on Continuous Profiling for Go. To make sure that I know what I'm talking about, I'm planning to do an in-depth study of the existing profilers and how they work. I'll try to summarize what I learned in this repository as it might be useful to others.

Todo

  • CPU Profiling
  • Heap Profiling
  • Mutex Profiling
  • Block Profiling
  • Wallclock Profiling (fgprof)
  • Go Docs
    • Diagnostics: Has a very good overview over the available profiling and tracing facilities but doesn't go into a lot of depth.
    • runtime/pprof: Lists the available profiles and has a little more explanation about what kind of data they produce.
    • runtime: Has documentation on the various control knobs and pprof facilities, e.g. MemProfileRate.
    • net/http/pprof: Not a lot of docs, but diving into the code from there shows how the various profilers can be started/stopped on demand.
  • JDB
    • Profiler labels in Go: An introduction to using pprof labels and how they allow you to add additional context to your profiles.
    • Custom pprof profiles: Example for using custom profiles, shows tracking open/close events of a blob store and how to figure out how many blobs are open at a given time.
    • Mutex profile: Brief intro to the mutex profile.
    • Using Instruments to profile Go programs: How to use the macOS Instruments app (I think it's built on dtrace) to profile Go programs. Not clear what the benfits are, if any.
  • Profiling Go programs with pprof by Julia Evans: A nice tour with a focus on heap profiling and the pprof output format.

Got great links to recommend? Open an issue or PR, I'd happy to add your suggestions : ).

Disclaimers

I work at Datadog on Continuous Profiling for Go (you should check it out) and they generously allowed me to do all this research and publish it.

The information on this page is believed to be correct, but no warranty is provided. Feedback is welcome!