限制JRuby中正则表达式高速缓存的大小

时间:2014-11-10 08:42:52

标签: jruby jrubyonrails

我们发现JRuby应用程序中的正则表达式缓存已经失控 - 它一直在不断增长和发展,直到应用程序停止运行。

它最终会进行垃圾收集,但在此之前,交易时间会变得太长(90秒而不是1-2秒)。

有没有办法阻止这个Regexp Cache增长如此之多或者限制缓存的大小?

1 个答案:

答案 0 :(得分:0)

首先,既然您已经提到在Very large retained heap size for org.jruby.RubyRegexp$RegexpCache in JRuby Rails App查看来源,您可能已经意识到没有实施此类支持。

会说你有2-3个选择来决定:

  • 在JRuby RubyRegexp
  • 中实施限制或完全禁用缓存的支持
  • 介绍" hack"这将检查可用内存并清除一些缓存RubyRegexp缓存,例如从另一个线程(至少直到PR被接受到JRuby)
  • 调查或使用不同的GC(包括一些JVM选项),以便应用程序执行更可预测...这取决于应用程序,并且在不知道具体细节的情况下无法回答(通常)

默认情况下,一个提示与JVM如何保持软引用-XX:SoftRefLRUPolicyMSPerMB=250 1000 (1秒)有关,因此降低它意味着它们会活得更短......但它可能只是关于它们何时被收集(取决于我猜的GC和Java版本)所以最终你可能会发现修复症状而不是真正的原因(正如所指出的那样,这些不能概括)尤其是对应用程序和/或使用的JVM OPTS知之甚少)