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, ph7spot.com