为什么我会看到ActionDispatch :: Routing :: RouteSet#call slowness?

时间:2015-07-16 18:29:12

标签: ruby-on-rails ruby-on-rails-3 heroku

查看我的Heroku应用程序的New Relic数据,有一个令我困惑的交易。它是跟踪中出现ActionDispatch :: Routing :: RouteSet #call的唯一一个。它经常占用大约30%的时间,因此我想加快速度,或者至少了解它的作用。

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

同样奇怪的是,时不时地花了很长时间:

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

我问自己,“这个特殊要求有什么不同?”控制器动作非常正常 - 而且减速器在Middleware中这一事实让我觉得控制器代码不相关。 (有人可以确认吗?)我唯一能想到的是这个特定的动作使用非整数资源ID:例如/ action_name / some-id-with-dashes。这是我的应用程序中唯一可以执行此操作的操作。这可能是原因吗? ActionDispatch :: Routing :: RouteSet#call究竟做了什么?是否有任何理论可以让某些人指引我朝着富有成效的方向发展?

我将在一个问题中总结一下:单个rails操作可能有什么不同,以至于在跟踪中看到ActionDispatch :: Routing :: RouteSet#调用会变慢?

先前研究

我在这个主题上找到了其他(未答复的)SO问题。但我决定打开一个单独的问题,因为我的案例中有些细节不同。在这里列出它们:

1)类似,但是ActionDispatch :: Routing :: RouteSet#call在New Relic中列为一个事务,而对我来说它是一个事务中的一个段:

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

2)类似,但涉及Rails 4,他们正在经历的减速比我的大,似乎是“与记忆相关”,而我的应用程序的内存使用似乎很好:

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

3)类似,但我不知道“葡萄”是什么(我没有使用它):

Why ActionDispatch::Routing::RouteSet takes so long

4)可能是同一个问题,但是没有太多细节,只是ActionDispatch :: Routing :: RouteSet#调用有时很慢:

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

1 个答案:

答案 0 :(得分:0)

对我来说,事实证明Newrelic ruby​​代理不能与我用来构建API端点的gem_pants一起使用。

有一个第三方gem'rocket_pants-rpm'来解决这个问题,但最初的一个停止使用newrelic_rpm版本3.9+来解决问题,尝试使用https://github.com/SpartaSales/rocket_pants-rpm上的分叉版本

添加此gem后,这就是newrelic报告找我的方式。

enter image description here