[仮想マシン]のJava JVMのチューニング

転送します。https://www.cnblogs.com/starhu/p/6400348.htmlは、utm_source = itdadao&utm_medium =紹介?

  1. ヒープサイズ
    、仮想メモリの使用可能制限システムと、物理メモリ利用可能な制限システムのオペレーティングシステムに関連するデータ・モデル(32-BT又は64ビット)の限界:JVM最大ヒープ・サイズは、三の限界を有しています。一般1.5G〜2Gに限定されるもので、32ビットシステム、オペレーティングシステム64無制限メモリ。私は、最大が1478メートルに設定され、テスト中のWindows Server 2003システム、3.5G物理メモリ、JDK5.0を持っています。
    典型的な設定:
    • Javaの  -Xmx3550m -Xms3550m -Xmn2g  -Xss128k
      -
      Xmx3550m:3550Mために利用可能な設定JVMの最大メモリ。
      -Xms3550m:3550メートルを促進するために、JVMのメモリを設定します。この値は、REALLOCATEメモリガベージコレクションの完了を避けるために、同じ-Xmx、各JVMを設定することができます。
      -Xmn2g:若い世代2Gのサイズを設定します。全体のJVMのメモリーサイズ=サイズ+永続的な世代のサイズ+サイズの若い世代古い世代若い世代の増加は、旧世代のサイズを小さくしますので、恒久的な世代は、一般的に固定サイズの64メートルです。システムのパフォーマンスにこの値より大きなインパクトは、Sunの関係者は3/8のヒープ全体の構成をお勧めします。
      -Xss128k:各スレッドのスタックサイズを設定します。各スレッドのスタックサイズは256Kである前に、各スレッドのスタックサイズ後JDK5.0は、1Mです。必要な調整の複数のアプリケーションのメモリサイズを通します。同じ物理メモリでは、この値を小さくするとより多くのスレッドを生成することができます。しかし、プロセス内のオペレーティング・システム・スレッドの数はまだ3000と5000にはない無限の世代、経験、制限されています。
    • -Xmx3550m -Xms3550m -Xss128kジャワ  -XX:NewRatio = -XX 4:SurvivorRatio = -XX 4:MaxPermSizeを16メートル-XX = = 0 MaxTenuringThreshold
      -XX:= NewRatio 4
      :セット(エデン二サバイバーの領域を含む)若い世代旧世代比(除去永久世代)。4に設定されている、若い世代と1の旧世代比の共有:4、若い世代1/5の合計スタック
      -XX:SurvivorRatio = 4:設定エデンサバイバー若い世代領域の面積比の大きさ。4に設定されている、サバイバーエデンゾーンを有する2つの領域の比率が2:4、総面積サバイバー若い世代1/6
      -XX:MaxPermSizeを= 16メートル:永続世代16メートルのサイズを設定します。
      -XX:MaxTenuringThreshold = 0:ごみの最大の年齢を設定します。直接、古い世代に、サバイバー領域なしで、その後、0にオブジェクトの若い世代を設定した場合効率を向上させることができるアプリケーションの古い世代の多くのため。この値が大きい値に設定されている場合、若い世代のオブジェクトは、オブジェクトを増大させ、その後、生存時間の若い世代ができサバイバー領域で多数回、コピーされ、若い世代への導入の増加、すなわちリサイクルします。
  2. 選択されたコレクター
    :JVMは、3つのオプションを与えたシリアルコレクタ、コレクタ並列、同時コレクタが、シリアルコレクタは並列と並行コレクターコレクターのための選択肢ので、ここでは主に、少量のデータにのみ適用されます。デフォルトでは、JDK5.0以前のシリアルコレクタを使用して、あなたが他のコレクターを使用する場合は、起動時に適切なパラメータを追加する必要がありますされていました。JDK5.0、JVMは、電流に基づいて後にシステム構成が決定されます。
    1. スループット優先平行コレクタ
      上述したように、科学的および技術的背景処理等のためにある一定の目標に到達するための主平行コレクタ。
      設定
      • -Xmx3800m -Xms3800m -Xmn2g -Xss128kジャワ  -XX:+ UseParallelGC -XX:ParallelGCThreads = 20である
        -XX:+ UseParallelGC
        :ガベージコレクタ平行コレクタを選択します。この構成では、若い世代のために有効です。上記構成によれば、若い世代はまだシリアルコレクターの古い世代を使用しながら、同時コレクションを使用すること。
        -XX:ParallelGCThreads = 20である
        。同時に多くのガベージコレクションスレッドを有する:すなわち、スレッド並列コレクタ構成の数、。この設定値は、プロセッサの数に等しいことが好ましいです。
      • -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XXのJava:+ UseParallelGC -XX:ParallelGCThreads = 20である  -XX:+ UseParallelOldGC
        -XX:+ UseParallelOldGC
        :設定し、古い世代のガベージコレクションを並列に回収されます。パラレルコレクターの旧世代のためのJDK6.0のサポート。
      • -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XXのJava:+ UseParallelGC   -XX:MaxGCPauseMillis = 100
        -XX:MaxGCPauseMillis = 100
        たびに最大の時間を若い世代のガベージコレクションを設定しますが、この時間を満たすことができない場合、JVMは自動的に若いを調整しますこの値を満たすためにサイズを代入します。
      • -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XXのJava:+ UseParallelGC -XX:MaxGCPauseMillis = 100  -XX:+ UseAdaptiveSizePolicy
        -XX:+ UseAdaptiveSizePolicy
        :このオプションが設定されている、パラレルコレクタは自動的に、若い世代領域のサイズと対応するサバイバーを選択しますパラレルコレクタは、開かれたときに比例帯、最低目標周波数システム、またはコレクションに対応する所定時間は、推奨値を使用します。
    2. 応答時間優先並行コレクタは、
      上述したように、並行コレクタは主に休止時間のガベージコレクションを低減、システムの応答時間が保証されています。アプリケーションサーバー、通信、その他のフィールドに適しています。
      設定
      • -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XXのJava:ParallelGCThreads = 20である  -XX:+ UseConcMarkSweepGCを-XX:+ UseParNewGC
        -XX:+ UseConcMarkSweepGCを:同時コレクションは、古い設定を取りました。この構成をテストした後、-XX:NewRatio = 4の構成は、未知の理由で失敗しました。したがって、若い世代のサイズは、好ましくは、-Xmnが設けられています。
        -XX:+ UseParNewGC:若い者に代わって並列コレクタを設定します。CMSを収集し、同時に使用することができます。JDK5.0は上記、JVMは、システム構成に独自の応じて設定することができる、それはこの値を設定する必要がありません。
      • -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XXのJava:+ UseConcMarkSweepGCを  -XX:CMSFullGCsBeforeCompaction = 5 -XX:+ UseCMSCompactAtFullCollection
        -XX:CMSFullGCsBeforeCompaction:メモリ空間の同時コレクターので、それはいくつかの時間のために実行した後に生成されます、整理し、圧縮されません」。作業効率を作る破片」が減少しています。この値は、仕上げ、圧縮後に何回GCメモリ空間を実行するように設定されています。
        -XX:+ UseCMSCompactAtFullCollection:旧世代のオープン圧縮。パフォーマンスが影響を受ける可能性がありますが、破片を除去することができます
  3. 補足情報
    JVMは、デバッグのための情報を印刷するには、コマンドラインパラメータの数を提供します。以下のいくつかがあります。
    • -XX:+ PrintGCの
      出力フォーマット:[GC 118250K-> 113543K(130112K )、0.0094143秒]

                      [フルGC 121376K-> 10414K(130112K)、0.0650971秒]

    • -XX:+ PrintGCDetailsの
      出力フォーマット:[GC [DefNew:8614K-> 781K(9088K)、0.0123035秒] 118250K-> 113543K(130112K)、0.0124633秒]

                      [GC [DefNew:8614K-> 8614K(9088K)、0.0000665秒] [終身:112761K-> 10414K(121024K)、0.0433488秒] 121376K-> 10414K(130112K)、0.0436268秒]

    • -XX:+ PrintGCTimeStamps  -XX:+ PrintGC:2つの混合して上記使用PrintGCTimeStamps
      出力が形成:11.851:[GC 98328K-> 93620K(130112K)、0.0082960秒]
    • -XX:+ PrintGCApplicationConcurrentTime:各ガベージコレクションの前に、印刷、プログラムは実行時間は中断されません。上記を使用して混合してもよい
      :出力形式アプリケーション時間:0.5291524秒
    • -XX:+ PrintGCApplicationStoppedTime:印刷ごみリサイクルプログラムは、期間中に中断されます。これは、上記と混合することができる
      形式で出力:合計時間は、どのファイルをアプリケーションのスレッドを停止した:0.0468229秒
    • -XX:PrintHeapAtGC:打印GC前后的详细堆栈信息
      输出形式:
      34.702:[GC呼び出し= 7前GC {ヒープ:
       DEF新世代合計55296Kは、[0x1ebd0000、0x227d0000、0x227d0000)52568Kを使用
      エデンスペース49152K、99%が使用されます  [ 0x1ebd0000、0x21bce430、0x21bd0000)
      使用スペース6144Kから、55%  [0x221d0000、0x22527e10、0x227d0000)
        空間6144K、使用0%[0x21bd0000、0x21bd0000、0x221d0000に)
       古い世代合計69632Kは、2696Kの使用[0x227d0000、0x26bd0000、0x26bd0000)
      空間使用69632K、3%  [0x227d0000、0x22a720f8、0x22a72200、0x26bd0000)
       パーマ世代合計8192Kを圧縮は、[0x26bd0000、0x273d0000、0x2abd0000)2898Kを使用しました
         空間8192K、35%が使用される[0x26bd0000、0x26ea4ba8、0x26ea4c00、0x273d0000)
          RO空間8192K、66%使用される[0x2abd0000、0x2b12bcc0、0x2b12be00、0x2b3d0000)
          RW空間12288K、46%が使用される[0x2b3d0000、0x2b972060、0x2b972200、0x2bfd0000)
      34.735: [DefNew:52568K-> 3433K(55296K)、0.0072126秒] 55264K-> 6615K(124928K)ヒープGC呼び出し= 8の後:
       DEF新世代合計55296K、使用3433K [0x1ebd0000、0x227d0000、0x227d0000)
      エデンスペース49152K、0%が使用  [0x1ebd0000、0x1ebd0000、0x21bd0000)
        空間6144K、55%が使用される[0x21bd0000、0x21f2a5e8、0x221d0000)から
        空間6144Kまで、0%は、使用[0x221d0000、0x221d0000、0x227d0000)
       古い世代合計69632K)3182K [0x227d0000、0x26bd0000、0x26bd0000を使用
      空間69632K、4%が使用  [0x227d0000、0x22aeb958、0x22aeba00、0x26bd0000)
       パーマ世代合計8192Kを圧縮は、2898K [0x26bd0000、0x273d0000、0x2abd0000)を用いる
         空間8192K、35%が使用される[0x26bd0000、0x26ea4ba8、0x26ea4c00、0x273d0000)
          RO空間8192K 、66%[0x2abd0000、0x2b12bcc0、0x2b12be00、0x2b3d0000)使用
          RW空間12288K、46%が使用される[0x2b3d0000、0x2b972060、0x2b972200、0x2bfd0000)
      }
      、0.0757599秒]
    • -Xloggc:ファイル名:上記と一緒にいくつかの使用、分析用のファイルに記録するログ情報。
  4. 一般的な構成の概要
    1. ヒープの設定
      • -Xms:初期ヒープサイズ
      • -Xmx:最大ヒープサイズ
      • -XX:NewSizeの= N-:設定し、若い世代のサイズ
      • -XX:NewRatio = N:若い世代と旧世代の比率を設定します。以下のような:3、旧世代の1の割合に若い世代を示す:3、総若い世代と若い世代の古い世代1/4
      • -XX:SurvivorRatio = N:若い世代領域でエデン比二つサバイバー領域。2つのサバイバー領域があることに注意してください。例えば:3、エデンを発現:サバイバー= 3:2、総面積サバイバー若い世代1/5
      • -XX:MaxPermSizeを= N:永続世代のサイズを設定します
    2. コレクタの設定
      • -XX:+ UseSerialGC:シリアルコレクタを提供
      • -XX:+ UseParallelGC:平行に配置コレクタ
      • -XX:+ UseParalledlOldGC:旧世代コレクタ平行に配置され
      • -XX:+ UseConcMarkSweepGCを:同時コレクターを提供
    3. ガベージコレクションの統計情報
      • -XX:+ PrintGC
      • -XX:+ PrintGCDetails
      • -XX:+ PrintGCTimeStamps
      • -Xloggc:ファイル名
    4. 平行に配置され、コレクタ
      • -XX:ParallelGCThreads = N-:セットはCPUの数は、並列コレクタを収集するために使用されます。スレッドの数を収集するために平行です。
      • -XX:MaxGCPauseMillis = N:最大停止時間を収集することは、並列に設けられています。
      • -XX:GCTimeRatio = N-:時間のガベージコレクションのパーセンテージ時間を実行しているプログラム。式1 /(1 + N)
    5. 同時コレクタの設定
      • -XX:+ CMSIncrementalMode:モード設定刻み。単一CPUの場合について。
      • -XX:ParallelGCThreads = N:並行コレクタは並列CPUの数は、収集され使用される場合、若い世代モードを収集するために設けられています。スレッドの数を収集するために平行です。


第四に、チューニングの概要

      1. 若い世代のサイズを選択
        • アプリケーションの優先応答時間大規模なセットとして、最小のシステム応答時間限界付近まで(実際の状況に基づいて)。この場合には、発生の若い世代の収集頻度は最小限です。同時に、古い世代のオブジェクトの範囲を減らします。
        • 優先アプリケーションスループット:大を設定することができる限り、ギガビットのレベルに到達することができます。応答時間を必要としないので、ガベージコレクションは、より一般的なアプリケーションの8CPUのために、並列に実行されてもよいです。
      2. 旧世代のサイズの選択
        • アプリケーションの優先順位の応答時間:そのサイズの必要性は通常、セットに注意するよう検討して、コレクターの同時古い世代を使用して、同時セッション率セッションの間、いくつかのパラメータを。ヒープが小さく設定されている場合は、メモリの断片化、高周波、明確なマーキングの伝統的な方法の使用を停止する回復アプリケーションを引き起こす可能性があります。大きなヒープ場合、長い収集時間が必要になります。最適なソリューション、通常得られ、以下のデータを参照する必要があります。
          • 並行ガベージコレクション情報
          • 同時永久世代のコレクションの数
          • 従来のGC情報
          • 若い世代と旧世代のリサイクルに費やした時間の割合
          若い世代やそれにかかる時間を短縮するために、古い世代は、一般的にアプリケーションの効率を高めます
        • スループット優先権出願:優先アプリケーションスループット一般的には、若い世代の多くは、より小さな古い世代を持っています。古い世代が生きているオブジェクトの長期保存を行うことながら、中期目標を減らすために、ほとんどの短期的な目標から可能な限り回復することができるように理由が、あります。
      3. 生じた破片の小さな山
        、それはヒープを圧縮しないように、古い世代の並行コレクタは、マーク、スイープアルゴリズムを使用しているため。コレクタが回復したとき、彼は大きなオブジェクトに割り当てることができ、隣接するスペースを、マージします。しかし、ヒープ領域が同時コレクターは十分なスペースを見つけることができない場合は、いくつかの時間のために実行した後、「残骸」があるだろう、小さいとき、そして同時収集は停止し、その後、伝統的なマーカーを使用して、回復の道をクリアします。「残骸」が表示される場合は、次のように必要になる場合があります。
        • -XX:+ UseCMSCompactAtFullCollection:コンカレントコレクタを使用する場合は、古い世代のための圧縮をオンにします。
        • -XX:CMSFullGCsBeforeCompaction = 0:フルGCは、本明細書に提供される回数に上記の構成の場合、旧世代の圧縮

おすすめ

転載: www.cnblogs.com/wjqhuaxia/p/11920545.html