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

els*_*ooo 3 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)
...
Run Code Online (Sandbox Code Playgroud)

我按照以下方式包括它们

@collection.each do |something|
    render :partial => 'partials/something', :locals => {:something => something}
end
Run Code Online (Sandbox Code Playgroud)

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

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

我希望你知道答案=)!

Win*_*eld 6

这可能是垃圾收集.

如果您使用分析软件(如NewRelic的)和一个Ruby解释器,比如Ruby企业版(REE),你可以打开GC的统计和确认,并测量多久GC运行和多少的时间在GC花费.

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

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

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

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