ruby-on-rails – Ruby GC执行超过约250-320ms每个请求

我有一个 ruby在rails应用程序.我正在调查我的NewRelic门户中的Apdex下降,我看到平均来说,250-320ms的时间花在GC执行上.这是一个非常令人不安的数字.我已经在下面添加一个屏幕截图.

我的Ruby版本是:

ruby 1.9.3p194(2012-04-20修订35410)[x86_64-linux]

任何调整建议都是理想的.这个数字应该大大降低.

解决方法

您在GC中花费了大量时间,因为您经常运行GC.认情况下,Ruby设置适用于小脚本的GC参数,而不是大型应用程序.尝试使用以下环境参数设置启动您的应用程序:
RUBY_HEAP_MIN_SLOTS=800000
RUBY_FREE_MIN=100000
RUBY_GC_MALLOC_LIMIT=79000000

这将是增加初始堆分配大小和填充GC数字,使其不经常运行.这可能会让你的应用程序使用更多的RAM,但它应该大大减少在GC上花费的时间.在认设置下,您可能每次请求多次运行GC;您希望理想地在每个请求(或更好的情况下,在类似于Unicorn’s OOB::GC的请求之间)运行它一次.

这些是我的应用程序的GC设置,您需要上下调整,最适合您的应用程序找到正确的设置;你正在枪打中间,你不经常运行GC,并且没有过多的内存使用.这是每个应用程序的特定的,但是,没有任何样板建议,我可以给出这些确切的设置应该是什么.从认值(10k插槽,1.8倍增长因子)增加应该会立即产生影响,您可以从那里进行调整,最适合您当前的配置.

这些参数here及更多信息here有完整的写作,而这些帖子是为REE 1.8.7编写的,它们也适用于Ruby 1.9.2.

那些是一些相当极端的数字,所以可能你在你的应用程序中做了一些事情,导致你分配比你应用更多的RAM,所以我鼓励你怀疑,梳理你的应用程序,热心分配无论如何,GC环境变量应该有助于分解这种情况.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...