十分之一突然变得缓慢(随机)

时间:2011-09-06 14:21:13

标签: ruby-on-rails partials

当我查看我的日志文件时,我得到以下几行:

...
Rendered partials/_something.html.erb (11.8ms)
Rendered partials/_something.html.erb (123.8ms)
Rendered partials/_something.html.erb (8.2ms)
Rendered partials/_something.html.erb (7.3ms)
Rendered partials/_something.html.erb (7.1ms)
Rendered partials/_something.html.erb (8.5ms)
Rendered partials/_something.html.erb (7.2ms)
Rendered partials/_something.html.erb (7.1ms)
Rendered partials/_something.html.erb (7.4ms)
Rendered partials/_something.html.erb (7.9ms)
...

我按以下方式加入

@collection.each do |something|
    render :partial => 'partials/something', :locals => {:something => something}
end

我觉得很奇怪,在这种情况下,第二个渲染(相同的部分)需要比任何其他渲染更长的时间。但是,当我重新加载页面时,其他一些渲染需要花费更多时间,而@collection - 变量的顺序仍然相同。

我实际上并不知道如何描述这个。我的意思是,当导致响应缓慢的something相同时,我能够弄明白。但它接缝只是一个随机的。这可能是一些内存泄漏吗?

我希望你知道答案=)!

1 个答案:

答案 0 :(得分:6)

这可能是垃圾收集

如果您使用分析软件(如NewRelic)和Ruby Enterprise Edition(REE)之类的ruby解释器,您可以打开GC统计数据并确认这一点并测量GC运行的频率以及GC花费的时间。

当您分配更多对象/数据时,由于数据大小或分配数量,您最终将触发GC。这似乎几乎是随机的,会注入你看到的延迟。

这显示为“丢失时间”,因为您在Ruby VM中测量它,这在GC执行时暂停。因此,您会在应用程序代码库中看到没有活动的随机峰值。

如果您对性能调优或GC行为感兴趣,那么一个好的起点是REE文档的GC部分:

http://www.rubyenterpriseedition.com/documentation.html#_garbage_collector_and_object_space