3

perm gen がガベージ コレクションされる前に、「フル GC」が 3 回連続して実行される理由は何ですか?

最初の GC はヒープを 2.4GB から 761MB に減らしましたが、6K を回復したように見えますが、実質的に GC perm gen に失敗しました。

若い世代のコレクションは無視します。

2 番目のフル GC は、その時点でサーバーの負荷が軽かったため、予想どおり、ヒープに対してほとんど何もしません。奇妙なことは、それがperm genに対して何もしなかったということです.

3 番目のフル GC は、最終的に perm gen を最大の 524 mb から 141 mb に減らします。

GC ログからの未編集のスニペットを次に示します。

2012-12-07T19:46:40.731-0600: [Full GC [CMS: 2474402K->761372K(2804992K), 4.6386780 secs]     2606228K->761372K(3111680K), [CMS Perm : 524286K->524280K(524288K)], 4.6387670 secs] [Times: user=4.68 sys=0.00, real=4.63 secs] 
2012-12-07T19:46:45.374-0600: [GC [ParNew
Desired survivor size 17432576 bytes, new threshold 6 (max 6)
- age   1:      65976 bytes,      65976 total
: 1552K->8827K(306688K), 0.0199700 secs] 762925K->770200K(3111680K), 0.0200340 secs]  [Times: user=0.08 sys=0.00, real=0.02 secs] 
2012-12-07T19:46:45.395-0600: [Full GC [CMS: 761372K->752917K(2804992K), 3.7379280 secs]  770212K->752917K(3111680K), [CMS Perm : 524287K->524287K(524288K)], 3.7380180 secs] [Times: user=3.77 sys=0.00, real=3.74 secs] 
2012-12-07T19:46:49.135-0600: [Full GC [CMS: 752917K->693347K(2804992K), 3.2845870 secs] 752917K->693347K(3111680K), [CMS Perm : 524287K->141759K(524288K)], 3.2846780 secs] [Times: user=3.32 sys=0.00, real=3.29 secs] 

システム情報と GC フラグ:

Java 1.7.0_07, 64-Bit Server, Ubuntu 12.04 
-Xms3g -Xmx3g -XX:PermSize=512m -XX:MaxPermSize=512m
-XX:+UseConcMarkSweepGC 

編集: 2 つのアプリ サーバーがあります。2 番目のものは、わずかに異なる動作を示しました。フル GC エントリは 2 つしかありませんでした。

2012-12-07T20:36:31.097-0600: [Full GC [CMS: 2307424K->753901K(2804992K), 5.0783720 secs] 2394279K->753901K(3111680K), [CMS Perm : 524280K->524121K(524288K)], 5.0784780 secs] [Times: user=5.12 sys=0.00, real=5.08 secs] 
2012-12-07T20:36:36.178-0600: [Full GC [CMS: 753901K->695698K(2804992K), 3.4488560 secs] 755266K->695698K(3111680K), [CMS Perm : 524121K->140568K(524288K)], 3.4489690 secs] [Times: user=3.48 sys=0.00, real=3.45 secs] 

若い世代が目立っていたようです。おそらく、私たちの特定のセットアップでは、ガベージ コレクション perm gen の間に他の GC (若い世代の GC) がなく、2 つの連続するフル GC が必要です。私はたくさん掘り下げましたが、この動作に関する議論は見つかりませんでした。

4

1 に答える 1

0

特にヒープ コレクション自体はすでに複雑な操作であるため、ヒープとパーマ ジェネレーションの同時コレクションが互いに影響を与えないことは驚くに値しません。これで、パーマ ジェネレーションが 2 回目にしか収集されない理由が説明できます。主に推測ですが。

perm gen で実際に収集されたもの (アンロードされたクラス、文字列?) の詳細を取得することは興味深いかもしれません。-XX:+PrintGCDetails が役に立ちます。おそらく -verbose:class.

于 2012-12-09T21:35:43.530 に答える