Over a million developers have joined DZone.

Thread Profiling: See Exactly What Your App Is Doing

DZone's Guide to

Thread Profiling: See Exactly What Your App Is Doing

· Performance Zone ·
Free Resource

Sensu is an open source monitoring event pipeline. Try it today.

RailsConf 2013 logo

This post comes from Sam Goldstein at the New Relic Blog.

RailsConf 2013 is right around the corner! And to celebrate, we’re publishing a series of blog post that highlight what’s new and exciting in the world of New Relic’s Ruby support. Don’t forget to check out yesterday’s post on Cross Application Tracing.

New Relic tries to bubble up the most significant performance data from your apps like database queries and response times. But sometimes you need to deep dive into how your code is executing to solve a problem.

For times like this, the New Relic Ruby agent provides a low overhead sampling profiler that collects call graphs for running production apps. These can be triggered on demand from the New Relic UI.

The Thread Profiler works by spawning a background thread that takes snapshots of other threads’ backtraces at regular intervals. Over time, the profiles builds up a good representation of where your application is spending most of its time down to the method call level. New Relic’s web UI visualizes Thread Profiles in an interactive hierarchical tree format, highlighting the ‘hot’ methods where the app is spending the most time.

New Relic Ruby Thread Profile

Our own Jason Clark gave a talk on this subject recently at Mountain West RubyConf. His session, DIY::Thread.profile — Light-Weight Profiling in Pure Ruby, described the techniques he used to write this pure Ruby profiler.

For more information on our Thread Profiling feature, see our Thread Profiler documentation.

Next up: Living on the Edge — Rails 4 & Ruby 2

Sensu: workflow automation for monitoring. Learn more—download the whitepaper.


Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}