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.
Here there is a gdb integration: https://github.com/david942j/gdb-ruby