在尝试加速rails应用程序时获取奇怪的加载时间报告

时间:2010-05-26 11:36:17

标签: ruby-on-rails profiling

我正在使用newrelic(开发者模式)来监控我的rails应用程序。 奇怪的是,加载相同的页面会产生不同的加载结果,其中一个随机部分不断超过其余部分。

作为示例(来自同一页面的所有结果,“messages / 1”,只是刷新)

                                             Exclusive         Total
Administration#find_by_sql                269 ms  35%   276 ms    36%
messages/show.html.erb Template           113 ms    15%     183 ms    24%
MessagesController#show                   90 ms     12%     760 ms    99%
events/_events_box.html.erb Template         24 ms  3%   24 ms     3%
SQL/show                                     19 ms  2%   19 ms    2%
User#find                                    19 ms  2%   19 ms    2%
Remainder                                    234 ms 31%  234 ms    31%

-------
subscriptions/_subscribe.html.erb Template   266 ms    44%   272 ms   45%
MessagesController#show                      61 ms  10%      606 ms   99%
messages/show.html.erb Template              61 ms  10%   365 ms   60%
SQL/other                                 24 ms     4%     24 ms  4%
layouts/_header.html.erb Template         20 ms     3%     28 ms  5%
events/_events_box.html.erb Template      19 ms     3%     19 ms  3%
Remainder                                 160 ms    26%     160 ms  26%

-------
drafts/_js_and_sbox.html.erb Template      265 ms   44%       269 ms  45%
MessagesController#show                    72 ms    12%       595 ms  100%
messages/show.html.erb Template               57 ms    9%  356 ms  59%
events/_events_box.html.erb Template          19 ms    3%     19 ms   3%
layouts/_header.html.erb Template             18 ms    3%        28 ms   5%
SQL/other                                  15 ms    2%     15 ms   2%
Remainder                                  153 ms   26%     153 ms  26%

是否有人知道为什么代码的随机部分(通常无关紧要且加载速度快)总是占用几乎一半的加载时间?也许是因为我在某些模板中执行查询?

2 个答案:

答案 0 :(得分:2)

这有点晚了,但也许对其他人有帮助......我认为这是因为垃圾收集随机点击并使页面加载时间膨胀大约150毫秒,请参阅this article了解更多信息讨论:

  

ruby​​-prof属性的全部费用   垃圾收集方法在哪里   GC被触发,而不是方法   分配内存。这就像   归咎于打破最后一根稻草   骆驼回来了。

答案 1 :(得分:1)

另一个选项是你的db在某些时候可能有点过载 - 造成缓慢的db-queries / wait-times。 NewRelic有时并不是非常具体。

如果您真的想调整自己的行为,我会将NewRelic的声明作为您希望使用更好的工具(例如ruby-prof)进行测试的指南。

我谈过使用这些工具: http://skillsmatter.com/podcast/ajax-ria/making-your-rails-app-kick-ass-with-ruby-prof-and-kcachegrind