└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # Ruby Performance Tools 2 | 3 | ## Terms 4 | 5 | - Wall time 6 | 7 | - CPU time 8 | 9 | ## Benchmark 10 | 11 | - [evanphx/benchmark-ips](https://github.com/evanphx/benchmark-ips) 12 | - [piotrmurach/benchmark-trend](https://github.com/piotrmurach/benchmark-trend) 13 | - [piotrmurach/benchmark-malloc](https://github.com/piotrmurach/benchmark-malloc) 14 | - [benchmark-driver/benchmark-driver](https://github.com/benchmark-driver/benchmark-driver) 15 | 16 | ## Profiling 17 | 18 | - [rbspy/rbspy](https://github.com/rbspy/rbspy) 19 | Sampling profiler for Ruby. 20 | 21 | - [ruby built-in profiler](https://github.com/ruby/ruby/blob/trunk/lib/profiler.rb) 22 | 23 | - [tmm1/perftools.rb](https://github.com/tmm1/perftools.rb) for Ruby < 2.1 24 | 25 | - [tmm1/stackprof](https://github.com/tmm1/stackprof) 26 | 27 | - [ruby-prof/ruby-prof](https://github.com/ruby-prof/ruby-prof) 28 | 29 | C extension, support GraphViz. 30 | 31 | - [palkan/test-prof](https://github.com/palkan/test-prof) 32 | 33 | Ruby Tests Profiling Toolbox 34 | 35 | - [tmm1/rblineprof](https://github.com/tmm1/rblineprof) 36 | 37 | - [SamSaffron/flamegraph](https://github.com/SamSaffron/flamegraph) 38 | 39 | - iprofiler + [Instruments](https://developer.apple.com/videos/play/wwdc2019/411/) (macOS only) 40 | 41 | ## Trace 42 | 43 | - [tmm1/rbtrace](https://github.com/tmm1/rbtrace) 44 | - [TracePoint](https://ruby-doc.org/core-2.6/TracePoint.html) 45 | - [TappingDevice](https://github.com/st0012/tapping_device) 46 | 47 | #### Rack-based app 48 | 49 | - [MiniProfiler/rack-mini-profiler](https://github.com/MiniProfiler/rack-mini-profiler) 50 | 51 | ## Memory 52 | 53 | - [ko1/allocation_tracer](https://github.com/ko1/allocation_tracer) 54 | 55 | - [SamSaffron/memory_profiler](https://github.com/SamSaffron/memory_profiler) 56 | 57 | - [schneems/get_process_mem](https://github.com/schneems/get_process_mem) 58 | 59 | - [socketry/process-metrics](https://github.com/socketry/process-metrics) 60 | 61 | ## GC 62 | 63 | - [ko1/gc_tracer](https://github.com/ko1/gc_tracer) 64 | - [tmm1/gctools](https://github.com/tmm1/gctools) for Ruby 2.1, [not recommend for Ruby 2.5](https://github.com/tmm1/gctools/issues/16) 65 | 66 | ## Monitoring 67 | 68 | - [Prometheus Ruby Client](https://github.com/prometheus/client_ruby) 69 | 70 | - [Simple Graphite](https://github.com/imeyer/simple-graphite) 71 | 72 | - [Raindrops](https://bogomips.org/raindrops/) 73 | 74 | ## Talks on performance, memories 75 | 76 | - ["Performance Matters" by Emery Berger](https://www.youtube.com/watch?v=r-TLSBdHe1A) 77 | - [RailsConf 2017: Your App Server Config is Wrong by Nate Berkopec](https://www.youtube.com/watch?v=itbExaPqNAE) 78 | - [RailsConf 2017: Panel: Performance... performance](https://www.youtube.com/watch?v=SMxlblLe_Io) 79 | - [RubyConf 2016: Halve Your Memory Usage With These 12 Weird Tricks](https://www.youtube.com/watch?v=kZcqyuPeDao) 80 | - [Memory Fragmentation and Bloat in Ruby](https://www.youtube.com/watch?v=eBmM-yWPeMw) 81 | - [How to Performance (at GORUCO in NYC)](https://speakerdeck.com/eileencodes/how-to-performance-at-goruco-in-nyc) 82 | 83 | ## Reading materials 84 | 85 | * [Ruby 2.1: Out-of-Band GC](http://tmm1.net/ruby21-oobgc/) 86 | * [Ruby 2.1: RGenGC](http://tmm1.net/ruby21-rgengc/) 87 | * [Ruby 2.1: objspace.so](http://tmm1.net/ruby21-objspace/) 88 | * [Ruby 2.1: Profiling Ruby](http://tmm1.net/ruby21-profiling/) 89 | * [Ruby 2.1: Process.setproctitle()](http://tmm1.net/ruby21-process-setproctitle/) 90 | * [Ruby 2.1: Process.clock_gettime()](http://tmm1.net/ruby21-process-clock_gettime/) 91 | * [Ruby 2.1: Method Cache](http://tmm1.net/ruby21-method-cache/) 92 | * [Nothing Lasts Forever: Symbol Collection in Ruby 2.2](http://www.schneems.com/2015/01/19/ruby-22-symbol-gc.html) 93 | * [Unraveling String Key Performance in Ruby 2.2](http://www.schneems.com/2014/11/26/unraveling-string-key-performance.html) 94 | * [36% smaller Rails memory footprint through Benchmarking](http://www.schneems.com/2014/11/07/i-ram-what-i-ram.html) 95 | * [Benchmarking Rack Middleware](http://www.schneems.com/2014/10/31/benchmarking-rack-middleware.html) 96 | * [Why does my App's Memory Use Grow Over Time?](https://www.schneems.com/2019/11/07/why-does-my-apps-memory-usage-grow-asymptotically-over-time/) 97 | * [How to optimize Ruby internal](https://speakerdeck.com/watson/how-to-optimize-ruby-internal?slide=5) 98 | 99 | ## People (A-Z) 100 | 101 | * [Aaron Patterson (@tenderlove)](https://twitter.com/tenderlove) 102 | * [Charles Nutter (@headius)](https://twitter.com/headius) 103 | * [Chris Seaton (@ChrisGSeaton)](https://twitter.com/ChrisGSeaton) 104 | * [Eileen M. Uchitelle (@eileencodes)](https://twitter.com/eileencodes) 105 | * [Hongli Lai (@honglilai)](https://twitter.com/honglilai) 106 | * [k0kubun (@k0kubun)](https://twitter.com/k0kubun) 107 | * [Nate Berkopec (@nateberkopec)](https://twitter.com/nateberkopec) 108 | * [Noah Gibbs (@codefolio)](https://twitter.com/codefolio) 109 | * [Richard Schneeman 🤠 (@schneems)](https://twitter.com/schneems) 110 | * [Sam Saffron (@samsaffron)](https://twitter.com/samsaffron) 111 | --------------------------------------------------------------------------------