【问题标题】:Very large retained heap size for org.jruby.RubyRegexp$RegexpCache in JRuby Rails AppJRuby Rails 应用程序中 org.jruby.RubyRegexp$RegexpCache 的非常大的保留堆大小
【发布时间】:2014-10-30 16:42:25
【问题描述】:

我们已经为我们的应用程序分析了一个堆转储文件(在 Tomcat 上使用 jruby 1.7.8 运行)。

它向我们展示了类 org.jruby.RubyRegexp$RegexpCache 的保留堆大小非常大 (439,459,128)。这是我们内存使用量的 48%

查看file 的源代码,它是在启动时创建的 3 个最终静态对象(patternCache/quotedPatternCache/preprocessedPatternCache)

这似乎是 JRuby 的核心部分。我的问题是,有这么大比例的堆专用于这个缓存是否正常?

【问题讨论】:

    标签: ruby-on-rails jruby jrubyonrails


    【解决方案1】:

    它可能通过 Rails/gems/user-code 源缓存了大部分 Regexp 对象......所以它可能非常庞大。除非您遇到泄漏(内存不足问题),否则一切都很好,因为实际的缓存被包装在软引用中,这意味着在有足够的内存(堆大小)之前,它们将被垃圾回收所保留,但只要你分配不适合所有(或部分)缓存的块可能会被垃圾收集。

    【讨论】:

    • 再次感谢您的帮助,我们实际上已经找到了原始问题 - 它是由简单的字符串替换引起的。详情:-github.com/jruby/jruby/issues/2078
    猜你喜欢
    • 1970-01-01
    • 2010-09-17
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 2016-01-29
    相关资源
    最近更新 更多