XRay

Description

XRay provides a lightweight yet powerful toolbox for troubleshooting Ruby applications when things stop making sense. XRay includes GDB and DTrace tooling as well as a Thread Dump utility that can dump the stack trace of all the thread in your Ruby VM when you send a QUIT signal.

GDB

Copy the gdb_macros file provided in the gem as your ~/.gdbinit file. You will find more details on how to use them, in my Troubleshooting Ruby Shortcut

Thread Dump

After patching your Ruby VM with caller_for_all_threads_patch_for_MRI_1.8.6.diff (or caller_for_all_threads_patch_for_MRI_1.8.7.diff) as explained in this document, you can install a signal handler in charge of dumping the stack trace for all the threads in your Ruby VM with:

require "rubygems"
require "xray/thread_dump_signal_handler"

You can then trigger a thread dump at any time with

kill -QUIT <pid of your ruby process>

DTrace

Fire DTrace Application Probes

See XRay::DTrace::Tracer

Out-of-the-box Rails DTrace Instrumentation ***

You are one require away from triggering automatically DTrace events for Rails requests, database access and template rendering. As simple as

 # environment.rb
 Rails::Initializer.run do |config|

   ...

   config.after_initialize do
     require "rubygems"
     require "xray/dtrace/rails/enable_tracing"
   end  
 end

See

  • lib/xray/dtrace/railsenable_tracing.rb
  • lib/xray/dtrace/action_controller_tracing_extension.rb
  • lib/xray/dtrace/active_record_tracing_extension.rb

Author

Philippe Hanrigou, http://ph7spot.com