Update – if you sign up through this link, New Relic will send you $25 gift card for trying it out.
Like many Rails people, I use New Relic to monitor my Rails app. At Wave Accounting we even pay for it. It’s well worth the money, as you get a lot of extra visibility into your app.
At the standard level, New Relic is pretty good, but sometimes it seems like I’m missing out on something. RPM will show me that a controller is running slowly but most of the time is spent in the controller itself, not really saying what’s happening. I’ve recently discovered a few tweaks that have made a huge difference.
Turn on garbage collection
It’s pretty embarrassing, but this isn’t on by default. It’s so simple to figure out how much of your time is spent in GC, the only caveat is that you have to be running REE or 1.9.x. This doc explains how, but all you have to do is turn on the stats and New Relic does the rest.
# For REE
GC.enable_stats
# For 1.9.2
# GC::Profiler.enable
Put that in an initializer, and you get GC activity in almost all your graphs:
Local development mode
If you go to http://localhost:3000/newrelic you will get some in depth information about what’s going on in your app when in dev mode. If you’re using pow then add the following to ~/.powconfig:
export NEWRELIC_DISPATCHER=pow
export POW_WORKERS=1
There’s a wealth of information here.
Trace specific sections of your code
Your controller does a bunch of stuff but New Relic reports it as one big block. block tracing to the rescue!
respond_to do |format|
format.html do
self.class.trace_execution_scoped(['Custom/MyController#show/render_html']) do
do_it_in_html
end
end
format.pdf do
self.class.trace_execution_scoped(['Custom/MyController#show/render_pdf']) do
do_it_in_pdf
end
end
end
Then, these blocks will be counted separately.
Trace methods in your code, or other people’s code
Want to do the same thing as before on someone else’s code, or at a method level? Add a method tracer in your initializer:
require 'new_relic/agent/method_tracer'
CalculationEngine.class_eval do
include NewRelic::Agent::MethodTracer
add_method_tracer :calculate_taxes
add_method_tracer :calculate_totals
add_method_tracer :send_invoice
end
Poof, all those are now traced and broken out separately:
Other things
You can also trace custom metrics, such as user signups or report views. I’m still working on that, along with monitoring background jobs.
a