2
votes

Looking at my New Relic data for my Heroku app, there's one transaction that's puzzling me. It's the only one where ActionDispatch::Routing::RouteSet#call appears in the trace. It takes up about 30% of the time on a very frequent action, so I'd like to speed it up, or at least understand what it does.

https://www.dropbox.com/s/kvs5ez7stxpul1n/Screenshot%202015-07-16%2011.00.17.png?dl=0

Also weird is that every now and then, it takes a REALLY long time:

https://www.dropbox.com/s/636lrmny3mu20o4/Screenshot%202015-07-16%2011.03.57.png?dl=0

I've asked myself, "What is different about this particular request?" The controller action is pretty normal -- and the fact that the slow-down is in Middleware makes me think that the controller code isn't relevant. (Can someone confirm that?) The only thing that I can think of is that this particular action uses non-integer resource IDs: e.g /action_name/some-id-with-dashes. It's the only action in my app that does this. Is it possible that this can be the cause? What does ActionDispatch::Routing::RouteSet#call do anyway? Are there any theories that someone can give me to point me in a fruitful direction?

I'll sum that all up in a single question: What could be different about a single rails action such that one would see slowness with ActionDispatch::Routing::RouteSet#call in its trace?

PRIOR RESEARCH

I found other (unanswered) SO questions on the topic. But I decided to open a separate question because some of the details differed in my case. Listing them here:

1) Similar, but ActionDispatch::Routing::RouteSet#call is listed in New Relic as a transaction, whereas for me it is a segment within a transaction:

ActionDispatch::Routing::RouteSet#call Rails 4.1 really slow

2) Similar, but involves Rails 4 and also the slowdown they are experiencing is way larger than mine and seems to be "memory related", whereas my app's memory use seems fine:

Slow action in Rails application: ActionDispatch::Routing::RouteSet#call

3) Similar, but I don't know what "Grape" is (and I'm not using it):

Why ActionDispatch::Routing::RouteSet takes so long

4) Might be the same issue, but there aren't a lot of details, just that ActionDispatch::Routing::RouteSet#call is sometimes slow:

ActionDispatch::Routing::RouteSet intermittently takes too long to route requests

1
Did you ever find a solution to this? We are facing the same problemmuirbot
We have the same issuefuyi

1 Answers

0
votes

For me, it turns out that Newrelic ruby agent does't work with rocket_pants, the gem I use to build API endpoints.

There is a third party gem 'rocket_pants-rpm' to solve this issue, but the original one stop working from newrelic_rpm version 3.9+, to fix the issue, try using the forked version at https://github.com/SpartaSales/rocket_pants-rpm

This is how newrelic report looks for me after adding this gem.

enter image description here