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:
You can also trace custom metrics, such as user signups or report views. I’m still working on that, along with monitoring background jobs.