2013-10-24 36 views
1

我不一定要找的答案,我正在尋找的診斷工具,這將有助於我把問題的根源Rspec的(JRuby的)內存溢出異常

我們有一個非常建議rspec中的大型測試套件在運行時會耗盡內存。

當我們得到一個消息,它說,「Javalang :: OutOfMemoryError錯誤\ n PermGen的空間」

這不會發生特定的測試,但它似乎在同一時間發生在測試套件運行(顯然內存使用量不會被釋放,最終導致失敗)

我們通過ojdbc使用jruby和oracle。

有沒有人有什麼建議來追蹤這個問題的根源? JMAP明顯受到小於有用(雖然我們沒有得到要調試ojdbc點)

回答

2

感謝約什 - 西爾弗曼IND史蒂芬卡爾格對於這樣的回答:

提高PermGen的最大解決了這個問題。看起來,將PermGen最大值加倍爲128兆可以支持10倍大的測試套件。從我的測試來看,java進程的內存使用開始在新的PermGen max下達到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" 
+0

這是一個運行時設置,還是需要編譯? –

+0

另外,我不認爲這個選項與JVM> v8相關,我在Travis CI上得到這個警告:''''Java HotSpot(TM)64位服務器VM警告:忽略選項MaxPermSize = 128m;支持是在8.0中刪除''''' –