Application Performance Group - Knowledge Sharing
Knowledge Sharing
Early in the days of the Application Performance group’s formation we started an issue to share memory domain articles, books and resources within our group and GitLab. We are moving some of these resources to a shared handbook page. We aim to update this frequently.
Our approach to performance problems
We are life-long learners and every new challenge we take on means lessons were learned, and we think that other teams can benefit from us documenting these.
We have therefore started to document how we approach performance and memory related issues, as well as some common themes we have observed over the past months.
Internal Training Materials
We have a materials shared in our internal Ruby on Rails Performance Training
Google Drive. To view the materials ensure that you are logged in with your GitLab account and go to https://drive.google.com/ and expand your Shared Drives. Everyone within GitLab should have access to these materials, but if you do not please submit an access request.
GitLab docs
Articles
- 42 performance tips for Ruby on Rails - Magnus Skog
- Cables vs. malloc_trim, or yet another Ruby memory usage benchmark — Martian Chronicles, Evil Martians’ team blog
- Chapter 19: Threads - Ruby Hacking Guide
- CRuby Memory Slots: See Them, Tweak Them, Make Them Fast — Appfolio Engineering
- Debugging memory leaks in Ruby
- How do Ruby & Python profilers work?
- Implementing threads :: Operating systems 2018
- Incremental Garbage Collection in Ruby 2.2 - Heroku
- Inline caching in MRI - Tenderlovemaking
- Java theory and practice: Anatomy of a flawed microbenchmark
- Multithreading in the MRI Ruby Interpreter »= BugFactory
- Optimization Techniques by Benchmark Winners — Juanito Fatas
- Optimizing Rails for Memory Usage Part 2: Tuning the GC - Collective Idea
- Prometheus Counters and how to deal with them – INNOQ
- Rails profiling story, or how I caught Faker trying to teach my app Australian Slang — Martian Chronicles, Evil Martians’ team blog
- Ruby 2.7 and the Compacting Garbage Collector — Appfolio Engineering
- Ruby 2.x source code learning: memory management & GC
- Ruby Concurrency and Parallelism in Multithreaded Apps: A Tutorial - Toptal
- Ruby’s Global Method Cache — Appfolio Engineering
- Ruby’s performance tuning way · GitHub
- RubyKaigi2018: Faster Apps No Memory Thrash - Google Slides
- Switching from Unicorn to Puma - FiNC Tech Blog - Medium
- The Limits of Copy-on-write: How Ruby Allocates Memory
- Tuning Ruby’s Global Method Cache – Shopify Engineering
- Understanding Ruby GC through GC.stat
- Unicorn vs. Puma vs. Passenger: which app server is right for you? - Scout APM Blog
- Untangling Ruby Threads
- Visualizing Your Ruby Heap by Tenderlove
- Watching and Understanding the Ruby 2.1 Garbage Collector at Work - Thorsten Ball
- What causes Ruby memory bloat? – Joyful Bikeshedding
- Who’s afraid of the big bad lock? - Space Vatican
Books
- How Linux Works: What Every Superuser Should Know by Brian Ward
- Ruby Performance Optimization: Why Ruby Is Slow, and How to Fix It by Alexander Dymo
- Ruby Under a Microscope by Pat Shaughnessy
- Working with Ruby Threads by Jesse Storimer
Podcasts
Tools
- GitHub - ko1/allocation_tracer: Add ObjectSpace::AllocationTracer module.
- GitHub - michaelherold/benchmark-memory: Memory profiling benchmark style, for Ruby 2.1+
- GitHub - MiniProfiler/rack-mini-profiler: Profiler for your development and production Ruby rack apps.
- GitHub - ruby-prof/ruby-prof: A ruby profiler.
- GitHub - SamSaffron/memory_profiler: memory_profiler for ruby
- GitHub - srawlins/allocation_stats: Tooling for tracing object allocations in Ruby 2.1
- GitHub - tmm1/stackprof: a sampling call-stack profiler for ruby 2.1+
- rbspy docs
ac0e3d5e
)