Debugging & Profiling Rails Application

  • 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