1

我不一定要为此寻找答案,我正在寻找有关诊断工具的建议,以帮助我找到问题的根源

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

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

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

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

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

4

1 回答 1

2

感谢 Josh Silverman ind Steven Karger 的回答:

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

# in your .bashrc or .bash-profile, or other environment control:
export JRUBY_OPTS="--1.9 -J-XX:MaxPermSize=128m"
于 2013-10-30T14:07:23.747 回答