If you want to investigate what's contributing to CPU or memory usage, start
lazygit with the -profile
command line flag. This tells it to start an
integrated web server that listens for profiling requests.
While lazygit is running with the -profile
flag, perform a CPU profile and
save it to a file by running this command in another terminal window:
curl -o cpu.out http://127.0.0.1:6060/debug/pprof/profile
By default, it profiles for 30 seconds. To change the duration, use
curl -o cpu.out 'http://127.0.0.1:6060/debug/pprof/profile?seconds=60'
To save a heap profile (containing information about all memory allocated so far since startup), use
curl -o mem.out http://127.0.0.1:6060/debug/pprof/heap
Sometimes it can be useful to get a delta log, i.e. to see how memory usage developed from one point in time to another. For that, use
curl -o mem.out 'http://127.0.0.1:6060/debug/pprof/heap?seconds=20'
This will log the memory usage difference between now and 20 seconds later, so it gives you 20 seconds to perform the action in lazygit that you are interested in measuring.
To display the profile data, you can either use speedscope.app, or the pprof tool that comes with go. I prefer the former because it has a nicer UI and is a little more powerful; however, I have seen cases where it wasn't able to load a profile for some reason, in which case it's good to have the pprof tool as a fallback.
Go to https://www.speedscope.app/ in your browser, and drag the saved profile onto the browser window. Refer to the documentation for how to navigate the data.
To view a profile that you saved as cpu.out
, use
go tool pprof -http=:8080 cpu.out
By default this shows the graph view, which I don't find very useful myself. Choose "Flame Graph" from the View menu to show a much more useful representation of the data.