私のアプリは「Old Generation」/「Tenured Generation」のサイズの増加を示しており、これが「Old Gen」の最大制限に達すると、突然 PermGen のサイズが増加します。私の世代のサイジングは次のとおりです。
-Xmx1200m -Xms1200m -Xmn450m -XX:MaxPermSize=600m -XX:+UseParallelGC
これは 32 ビットの Fedora 上にあるため、これより大きなヒープを持つことはできません。
このアプリは、Spring IOC と Hibernate を使用していますが、特別なクラスローディングは行っていません。Spring App-context.xml は、約 1000 の Bean を定義しています。
このアプリは 175MB の PermGen から始まり、数時間で ~250MB まで着実に増加し、Tenured Generation が ~780MB に達するまでそのままで、その後 permgen は ~500MB にジャンプし、Old Gen は ~500MB に低下します。
これにより、毎日アプリを再起動する必要があり、OutOfMemory エラーが迫ってくるのではないかと本当に恐れています。
ありがとう Gala101
5 月 13 日: 「Old Gen」がガベージ コレクションされるとどうなるか、誰かに光を当ててもらえませんか?
jvm は「Old Gen」からのコレクションを PermGen に入れますか?
PermGen のスパイクは、「Old Gen」からのコレクションが発生した場合にのみ発生します。また、OldGen のサイズの減少は、PermGen のサイズの増加とほぼ一致します。
PS: PermGen を確実に消費するため、ライブ デプロイ/アンデプロイは行いません。
以下は、私の監視ページからの現在のスパンショットです: (コミットされた部分は、約 250 MB から 500 MB にジャンプしました)
PS Perm Gen
Type Non-heap memory
Usage init = 16777216(16384K) used = 254453736(248489K) committed = 504954880(493120K) max = 629145600(614400K)
Peak Usage init = 16777216(16384K) used = 254453736(248489K) committed = 504954880(493120K) max = 629145600(614400K)
Collection Usage init = 16777216(16384K) used = 252421536(246505K) committed = 504954880(493120K) max = 629145600(614400K)