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.
Don't know how the following compare to the ones on the document already. I've only used pprofile.
pprofile is a "line-granularity, thread-aware deterministic and statistic pure-python profiler. Inspired from Robert Kern's line_profiler."
pyheat - pprofile + matplotlib = Python program profiled as an awesome heatmap
profiling package is an interactive continuous Python profiler. It is inspired from Unity 3D profiler.
pyvmmonitor_core - Open Source bits of the core utilities used in PyVmMonitor http://www.pyvmmonitor.com/
Function-Profiler - This is a Python 3.6 module to profile function performance. It records the number of calls made to select functions, and outputs statistics about their execution times.
QGProfiler is a simple, user controlled profiler. It differs from other profilers in that it provides the programmer the control of granularity with which various parts of the program are profiled. (blog post)
bprofile is a wrapper around cProfile, gprof2dot and graphviz, providing a simple context manager for profiling sections of Python code and producing visual graphs of profiling results. It works on Windows and Unix.
grav - A collection of tools to help visualise process execution.
flameprof - Flamegraph generator for python's cProfile stats.
pyprof2calltree - Profile python programs and view them with kcachegrind
lptrace is strace for Python programs. It lets you see in real-time what functions a Python program is running. It's particularly useful to debug weird issues on production. (Might not support Python 3, but there may be a fork that does.)
Pympler - Development tool to measure, monitor and analyze the memory behavior of Python objects in a running Python application. (Includes Muppy.)
memprof - A memory profiler for Python. As easy as adding a decorator
YouTube video: Watch your Python script with strace (2014)