〜300のJUnitテストを実行し、Springコンテキストを使用しているときに、「java.lang.OutOfMemoryError:PermGenspace」が表示されます。それ以来、PermGenを食いつぶしているものを理解するのに苦労しています:
- 定常状態では、アプリは約90mのpermgenスペースを消費します
- 私はユニットテストのために-XX:MaxPermSize=256mを試しました-まだ不足しています
- 有効にする
-XX:+TraceClassLoading
と-XX:+TraceClassUnloading
、の前の最後の20〜30のテストを実行しているときに、追加の「読み込み」イベントが表示されませんOutOfMemoryError
。
後者は、Classオブジェクト以外の何かがPermGenを埋めていることを示唆しているようです。もしそうなら、それは何でしょうか?たとえば、クラスインスタンスがPermGenに保存される状況はありますか?
これが私のVM情報です:
$ java -version
java version "1.6.0_25"
Java(TM) SE Runtime Environment (build 1.6.0_25-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.0-b11, mixed mode)
関連している
FWIW、この投稿を引き起こした私の問題の根本はやや些細なことであることが判明しました:Maven SurefireプラグインがVMをフォークするときにMAVEN_OPTS(またはmvnを実行するVMインスタンス)からVM設定を継承すると仮定しました-それは(ブーイング)しません。プラグインの構成でargLineを使用して明示的に指定する必要があります。HTH。