debugging & profiling rails application

Download Debugging & Profiling Rails Application

If you can't read please download the document

Upload: dpaluy

Post on 31-Oct-2014

252 views

Category:

Documents


8 download

DESCRIPTION

Overview of Debugging and Profiling tools for Rails

TRANSCRIPT

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