1

GC に膨大な時間がかかっている状況に直面しましたが、何が原因なのかわかりません。ここにjstat -gcコマンドの出力があります

S0C     S1C     S0U     S1U EC        EU       OC        OU        PC       PU       YGC  YGCT      FGC FGCT      GCT
77440.0 73088.0 22896.4 0.0 1946624.0 222690.4 4194304.0 3638965.1 262144.0 216641.1 1093 11258.452 3   10031.493 21289.944

フル GC が 3 回実行され、完了するまでに 100031 秒かかりました。

アプリ サーバーの起動スクリプトは次のとおりです。

-Xms6144m -Xmx6144m -XX:MaxPermSize=256m -Djava.security.policy=/bea/wlserver_10.3/server/lib/weblogic.policy -Dweblogic.ProductionModeEnabled=true -da -Dplatform.home=/bea/wlserver_10.3 -Dwls.home=/bea/wlserver_10.3/server -Dweblogic.home=/bea/wlserver_10.3/server -Dweblogic.management.discover=true -Dwlw.iterativeDev=false -Dwlw.testConsole=false -Dwlw.logErrorsToConsole=false -Dweblogic.ext.dirs=/bea/patch_wls1036/profiles/default/sysext_manifest_classpath -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Duser.timezone=GMT -Dfile.encoding=UTF-8 -Duser.language=en -Duser.country=US -Dweblogic.wsee.wstx.wsat.deployed=false -XX:+DisableExplicitGC

Operating system is Sun OS 5.1
Java version 1.6.0_41

GC アルゴリズムのデフォルト。つまり、Young Gen は PS Scavenge に設定され、Old GC は PS MarkSweep に設定されます。

このような高い数値の理由は何でしょうか。教えてください。

4

3 に答える 3

0

元の jstat を見てください。これらは私が気付くものです...

使用率が高いため、古い世代で完全な GC を取得しています (3.5G が使用可能で、4G が使用可能です)。

デフォルトでは、VM はヒープを Young (Eden+Survivor) 世代と Old 世代の間で約 45/55 に分割しますが、いくつかのヒューリスティックも適用します。

Eden の容量は 1.9G ですが、使用率はわずか 217M (~12%) です。サバイバル スペースはそれぞれ約 75M で、使用率は約 22M です。旧世代は4Gで利用率は3.5Gと高い。

私には、Young から Old への過度に積極的な昇格と、必要に応じてサイズの小さい Young と Old が混在しているように見えます。ヤングはあなたのニーズに対してやや大きすぎるようです。ただし、過度に攻撃的なプロモーションを修正するには、Young にスペースが必要です。

まず、ヤングを調整するには:

-XX:NewRatio=5

これにより、Young (Eden+Survivor) が合計ヒープの 1/6 に設定されます (はい、1/5 ではなく 1/6 )。あなたの場合、1.9Gではなく〜980Mです。これにより、別の 1G が古い世代のヒープにプッシュされます。

次に、中程度の寿命のオブジェクトがあまりにも早く昇格されないようにしましょう。試す:

-XX:InitialTenuringThreshold=16 -XX:MaxTenuringThreshold=32

しかし、昇格する前にサバイバーをより長く維持するには、サバイバー スペースを増やす必要があります (エデンから少し切り出します)。

-XX:SurvivorRatio=6

これを私の最初の回答のオプションとあなたのオプションと組み合わせると、合計で次のようになります。

-Xms6144m -Xmx6144m -XX:MaxPermSize=256m
-XX:NewRatio=5
-XX:SurvivorRatio=6 -XX:InitialTenuringThreshold=16 -XX:MaxTenuringThreshold=32
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:-UseAdaptiveSizePolicy

以下を追加するとよいでしょう:

-XX:+PrintTenuringDistribution

これらのオプションを調査している間。

于 2013-11-15T04:23:18.910 に答える
0

VMStat を 5 時間実行すると、次の結果が得られました。出力の一部を提供しています:
swap free re mf pi po

40336468 4025208 383 5473 465 59
40336132 4025732 383 5477 465 59
40336020 4025732 383 5478 465 59
40335940 4025752 383 5479 465 59
40335860 4025776 383 5479 465 59
40335776 4025796 383 5480 465 59
40335696 4025816 383 5481 465 59
40335584 4025816 383 5482 464 59
40335504 4025836 383 5483 464 59
40335420 4025856 383 5484 464 59

于 2013-11-15T02:10:24.263 に答える