【问题标题】:Rspec (jruby) out of memory exceptionRspec(jruby)内存不足异常
【发布时间】:2013-10-30 22:07:23
【问题描述】:

我不一定要寻找这个问题的答案,我正在寻找可以帮助我找到问题根源的诊断工具建议

我们在 rspec 中有一个非常大的测试套件,当它全部运行时,内存不足。

当我们收到一条消息时,它会显示“Javalang::OutofMemoryError \n permgen space”

这不会发生在特定的测试中,但它似乎发生在测试套件运行的大约同一时间(显然内存使用量在没有被释放的情况下累积并最终导致失败)

我们通过 ojdbc 将 jruby 与 oracle 一起使用。

是否有人对如何追踪此问题的根源有任何建议? jmap 显然没有什么帮助(尽管我们还没有到调试 ojdbc 的地步)

【问题讨论】:

    标签: rspec jruby ojdbc


    【解决方案1】:

    感谢 Josh Silverman ind Steven Karger 的回答:

    提高 PermGen 最大值可以解决问题。看来,将 PermGen 最大值翻倍至 128 兆字节可以支持 10 倍大的测试套件。从我的测试来看,Java 进程的内存使用量在新的 PermGen 最大值下开始稳定在 690mb 左右(500 堆 + 128 perigean + 50mb 未知)。您可以通过修改 JRUBY_OPTS 来增加 PermGen 内存分配,如上所示。

    # in your .bashrc or .bash-profile, or other environment control:
    export JRUBY_OPTS="--1.9 -J-XX:MaxPermSize=128m"
    

    【讨论】:

    • 这是运行时设置,还是需要编译进去?
    • 另外,我认为此选项与 JVM > v8 无关,我在 Travis CI 上收到此警告:"Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0"
    猜你喜欢
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多