Python
- cProfile
- https://github.com/bdarnell/plop (blog post)
- https://github.com/rkern/line_profiler
- https://github.com/uber/pyflame (blog post)
- stacksampler: https://github.com/nylas/nylas-perftools
- vmprof: https://github.com/vmprof/vmprof-python
- https://pypi.python.org/pypi/statprof
- https://github.com/joerick/pyinstrument ("v underrated")
- https://pypi.python.org/pypi/gprof/1.0.4
- dtrace support in python 3.6 (and potentially lttng support)
- gdb (cf http://poormansprofiler.org/). gdb 7.0 unwinds CPython stack traces (?!??!?? how does this work?)
- https://github.com/evanhempel/python-flamegraph
Ruby
- stackprof: https://github.com/tmm1/stackprof
- https://github.com/ruby-prof/ruby-prof (airbnb fork: https://github.com/airbnb/ruby-prof)
- https://github.com/tmm1/rblineprof
- https://github.com/garybernhardt/readygo (strictly speaking a benchmarking tool not a profiling tool with some nice usability properties!)
- https://github.com/MiniProfiler/rack-mini-profiler (for Rack)
- https://github.com/schneems/derailed_benchmarks (for Rails)
- Client code (in CPP): https://github.com/code-mancers/rbkit-client / Ruby gem for embedding: https://github.com/code-mancers/rbkit
- https://github.com/tmm1/perftools.rb
- https://github.com/journalistrb/journalist (unfinished)
Ruby
- https://github.com/ice799/memprof (only works for ruby up to 1.8.7, see http://timetobleed.com/tag/memory/page/2/ )
- https://github.com/tenderlove/heapdump
- https://github.com/tenderlove/heapfrag
- https://github.com/tenderlove/heap-utils
- https://github.com/tenderlove/heap-analyzer
- https://github.com/SamSaffron/memory_profiler
- https://github.com/schneems/heapy (analyze ruby heap dump)
blog posts about memory profiling: (from https://twitter.com/b0rk/status/957994325476036613)
- http://tmm1.net/ruby21-objspace/
- https://github.com/yast/yast-installation/wiki/Measuring-the-Memory-Used-by-the-YaST-Installer
- https://speakerdeck.com/mrb/garbage-garbage-gaaaaaarrrbaaaaggeeee
- https://speakerdeck.com/mrb/goruco-2013
- activerecord-hackery/ransack#820
Python
- https://pypi.python.org/pypi/memory_profiler
- http://guppy-pe.sourceforge.net/
- tracemalloc and faulthandler in the standard library.
- https://hydra.snabb.co/build/2046401/download/1/studio.html
- https://jiffyclub.github.io/snakeviz/ for python cprofile outputs
(definitely out of scope, but interesting)
- https://github.com/ileitch/hijack
- rbtrace
- pyrasite
- automatically save results to disk (cf https://github.com/garybernhardt/readygo)
- give profiling results on the fly, instead of making the user wait for the end of the run
- ability to use it in production is key
- "I am working on a Rust thing to make Rails faster and am frustrated that I can't use the same profiling tools to measure before/after. (Instruments can't see into Ruby, stackprof can't see past FFI) "
- "the things that ruby has been missing since forever are":
- a way to get a stacktrace dump of all threads (which is easy)
- information about which thread was running at the time of said dump
- information about which threads are actively trying to get scheduled (e.g. they have work to do), threads that are waiting on IO to complete, and threads that are waiting for mutexes to become available.
Just thought I would also share the link for
rbtrace
, incase someone is looking for it:https://github.com/tmm1/rbtrace
Also, a co-worker of my, @Fryguy, worked on https://github.com/FryGuy/memory_analyzer , which takes Aaron P.'s
heap-analyzer
that is terminal based (basically `IRB plus a global variable), and doesn't require node to run locally.Best of luck with your sabbatical. Look forward to seeing what comes of it!