If you can't read please download the document
Upload
dpaluy
View
252
Download
8
Embed Size (px)
DESCRIPTION
Overview of Debugging and Profiling tools for Rails
Citation preview
Debugging and Profiling Rails AppDavid Paluy January 2013
Ruby is eating RAM
Agenda
Winter is coming! Garbage Collector Debug Tools Profiling Tools
The Task: Send ~30,000 e-mails
Result Before
How Ruby Works?Physical RAM
Process Heap
Ruby HeapRuby Object Ruby Object Ruby Object Ruby Object Ruby Object Ruby Object
Ruby Heap
New Object allocationFree ListA L L O C A T E D
F R E E
New Object allocationFree ListA L L O C A T E D
New Object allocationFree List is emptyA L L O C A T E D
New Object allocationFree List is empty Call GCA L L O C A T E D
GC Process
GC finds non-reachable objects and adds them to Free List If Free List is still empty, another Heap allocated
MRI GC
Conservative: any bit pattern could be a pointer (may produce false positive) Stop the world: no other Ruby code can execute during GC Mark & Sweep: mark all objects in use, than sweep away unmarked objects
More Objects => Longer GC => Slow
In our case Out of Memory!
How to Debug?
gem "pry-debugger" https://github.com/nixme/pry-debugger gem "debugger-pry" https://github.com/pry/debugger-pry
Tools
ObjectSpace.count_objects GC debug - Enable heap dump support gdb.rb (only Linux) Note: memprof works only with Ruby 1.8
ObjectSpace.count_objects
Enable heap dump support to RubyInstall custom patched version of ruby
Usage:
https://github.com/tmm1/gdb.rbAttached to existing process and examine the HEAP
Result After
Profiling Tools
Ruby Benchmark ruby-prof perftools.rb (Google perftools for Ruby)
Benchmark
gem 'benchmark_suite'https://github.com/evanphx/benchmark_suite
ruby-profgem 'ruby-prof' https://github.com/rdp/ruby-prof
ruby-prof Measurements
process time (RubyProf::PROCESS_TIME) wall time (RubyProf::WALL_TIME) cpu time (RubyProf::CPU_TIME) object allocations (RubyProf::ALLOCATIONS) memory usage (RubyProf::MEMORY) garbage collections runs (RubyProf::GC_RUNS) garbage collection time (RubyProf::GC_TIME)
perftools.rb https://github.com/tmm1/perftools.rbgem 'rack-perftools_profiler', :require => 'rack/perftools_profiler'
rack-perftools_profiler usage
KCacheGrind
Summary
More Objects => Longer GC => Slow Examine your HEAP Use Tools
Q&Ahttp://dpaluy.github.com @dpaluy [email protected] http://www.linkedin.com/in/davidpaluy