【发布时间】:2015-10-06 08:25:55
【问题描述】:
查看我的 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
我问过自己,“这个特定的请求有什么不同?”控制器动作很正常——而且中间件中的减速让我认为控制器代码不相关。 (有人可以确认吗?)我唯一能想到的是这个特定的操作使用了非整数资源 ID:例如 /action_name/some-id-with-dashes。这是我的应用程序中唯一执行此操作的操作。这可能是原因吗? ActionDispatch::Routing::RouteSet#call 到底做了什么?是否有任何理论可以让我指出一个富有成果的方向?
我将把所有这些总结在一个问题中:单个 rails 操作有什么不同,以至于人们会在其跟踪中看到 ActionDispatch::Routing::RouteSet#call 的缓慢?
先前的研究
我发现了有关该主题的其他(未回答的)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#call 有时很慢:
ActionDispatch::Routing::RouteSet intermittently takes too long to route requests
【问题讨论】:
-
您找到解决方案了吗?我们面临同样的问题
-
我们有同样的问题
标签: ruby-on-rails ruby-on-rails-3 heroku