Using Dtrace to Improve Rails Performance
Three companies recently collaborated to use DTrace, a powerful open source process introspection tool to find and fix a substantial Rails latency issue.
Teams from Joyent and Twitter and DTrace developer Bryan Cantrill from Sun joined forces to spend a day looking in detail at how Ruby processes behave within a Rails production environment. The purpose of the collaboration was to use the dynamic tracing framework to fix a latency issue observed in Twitter. DTrace is one of the components of the open source project OpenSolaris. It is designed for forensic investigation of processes, and as such is perfectly suited for the inspection and monitoring of Ruby processes running Rails applications.
During their analysis, the joint team discovered that the raising and catching of particular set of exceptions within Rails caused large amounts of CPU time to be consumed generating back-traces hundreds of frames long. Through the detection and removal of these exceptions, the latency of a particular class of Rails request-response cycles was substantially improved.
Joyent CTO and co-founder Jason Hoffman is vocal about the benefits of DTrace:
We use DTrace all the time in identifying performance issues in our customer's and in our own applications.
However, he believes that there is still room for improvement, and that the introspection into Ruby processes that DTrace offers is still not deep enough. Patches for versions 1.8.5 and 1.8.6 of Ruby are currently being worked on that will afford DTrace with an even greater ability to peer inside Ruby’s internals. Jason also believes that DTrace will continue to generate a tremendous amount of insight into production Rails and Ruby processes. With ports in development for FreeBSD and planned for OS X Leopard, DTrace is no longer an exclusive tool for Solaris users.
Interestingly, not only is this a success story for open source tools being used to improve open source frameworks, it is also a success story for the process of open source software development. Within 11 hours of a ticket being filed, it had been accepted by Rails creator David Heinemeier Hansson himself, and incorporated into the latest version of Rails for immediate use.
ok this is getting silly