ヒープサイズの設定 JVMの最大ヒープサイズには3つの制限があります:関連するオペレーティングシステムのデータモデルの制限、システムの利用可能な仮想メモリの制限、およびシステムの利用可能な物理メモリの制限。私はWindows Server 2003システム、3.5G物理メモリ、JDK5.0でテストし、最大1478Mに設定することができます。 典型的な設定:Java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -Xmx3550m: JVMの最大利用可能メモリを3550Mに設定します。Xms3550m:JVMのプロンプト・メモリーを3550Mに設定します。 この値を-Xmxと同じに設定すると、ゴミ収集が完了するたびにJVMがメモリーを再割り当てするのを避けることができます。-JVM全体のメモリー・サイズ=若い世代のサイズ+古い世代のサイズ+永続世代のサイズ。永続世代のサイズは通常64mに固定されているため、若い世代のサイズを大きくすると古い世代のサイズが小さくなります。この値は、システムのパフォーマンスに大きな影響を与える、3/8のヒープ全体のSunの公式推奨構成。 -XSS128K:各スレッドのスタックサイズを設定します。JDK5.0後、各スレッドのスタックサイズは1Mである、各スレッドのスタックサイズが256Kである前に、メモリのサイズを調整するために必要なスレッドのより多くのアプリケーション。同じ物理メモリでは、この値を減らすより多くのスレッドを生成することができます。しかし、オペレーティングシステムは、まだプロセス内のスレッド数に制限があり、無期限に生成することはできません、3000〜5000またはその程度の経験値。java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0 -XX:NewRatio=4: 若い世代と古い世代の比率を設定します。古い世代の比率。4に設定すると、若い世代と古い世代の比率は1:4となり、若い世代がスタック全体の1/5を占めます -XX:SurvivorRatio=4: 若い世代のEden領域とSurvivor領域のサイズの比率を設定します。XX:MaxPermSize=16m:永続世代のサイズを16mに設定します -XX:MaxTenuringThreshold=0:ゴミの最大年齢を設定します。0に設定すると、若い世代のオブジェクトはSurvivorゾーンを通過せず、直接古い世代に移動します。より多くの古い世代を持つアプリケーションでは、これは効率を向上させることができます。この値を大きく設定すると、若い世代のオブジェクトはサバイバー領域で複数回コピーされ、再び若い世代のオブジェクトの生存時間が長くなり、若い世代でリサイクルされる確率が高くなります。リサイクラーの選択 JVMにはシリアルコレクター、パラレルコレクター、コンカレントコレクターの3つの選択肢がありますが、シリアルコレクターはデータ量が少ない場合にしか適用できないため、ここではパラレルコレクターとコンカレントコレクターを中心に選択します。デフォルトでは、シリアルコレクタを使用する前に、JDK5.0は、他のコレクタを使用する場合は、適切なパラメータの起動に追加する必要があります。スループット優先の並列コレクタ 上述のように、並列コレクタは、主に科学技術やバックグラウンド処理に適した一定のスループットに到達することを目指しています。典型的な設定: java -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelGC: ゴミコレクタを並列コレクタに選択します。この設定は若い世代でのみ有効です。つまり、上記の設定では、若い世代は並行収集を使用し、古い世代はまだ直列収集を使用します。-XX:ParallelGCThreads=20: 並列コレクタのスレッド数を設定します。この値はプロセッサの数と同じに設定するのが最適です。java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC -XX:+UseParallelOldGC: エージングされたゴミ収集方法を並列に設定します。JDK6.0は古い世代の並列収集をサポートしています。java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100 -XX:MaxGCPauseMillis=100:各年少世代のごみ収集の最大時間を設定し、それが満たされない場合。JVMは、この値を満たすように若い世代のサイズを自動的に変更します。java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XXX:+UseParallelGC -XXX:MaxGCPauseMillis=100 -XXX:+UseAdaptiveSizePolicy -XXX:+UseAdaptiveSizePolicyこのオプションを設定すると、並列コレクタはターゲットシステムによって指定された最小応答時間または収集頻度などを達成するために、若い世代ゾーンサイズと対応する生存者ゾーン比率を自動的に選択します。レスポンスタイム優先のコンカレントコレクタ 前述のとおり、コンカレントコレクタは主にシステムのレスポンスタイムを確保し、ごみ収集時のダウンタイムを短縮します。アプリケーションサーバーや通信分野などに適しています。典型的な設定: java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:ParallelGCThreads=20 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC: 同時収集のための古い世代を設定します。を設定します。テストでこれを設定した後、-XX:NewRatio=4 の設定は原因不明で失敗しました。そのため、現時点では、-Xmnで若い世代のサイズを設定する方がよいでしょう。-XX:+UseParNewGC:若い世代を並列収集に設定します。jdk5.0以上では、システム構成に応じてJVMが勝手に設定するので、改めて設定する必要はありません。java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection -XX.CMSFullGCsBeforeCompaction: コンカレントコレクターはメモリ空間をコンパクトに整頓しないので、一定期間後に「フラグメント」を生成し、効率が悪くなります。この値はコンパクション前のGC数を設定します。-XX:+UseCMSCompactAtFullCollection: 古い世代の圧縮をオンにします。パフォーマンスに影響する可能性がありますが、フラグメンテーションをなくすことができます 補助情報 JVMは、デバッグのための情報を表示する多数のコマンドライン引数を提供します。主なものは次のとおりです: -XX:+PrintGC 出力形式: [GC 118250K->113543K(130112K)、0.0094143秒] [Full 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秒] [Tenured: 112761K->10414K(121024K), 0.0433488秒] 1213768614K(9088K)、0.0000665秒] [テニュア:112761K->10414K(121024K)、0.0433488秒] 121376K->10414K(130112K)、0.0436268秒]
-XX:+PrintGCTimeStamps -XX:+PrintGC: PrintGCTimeStamps は上記 2 つと混在可能 出力形式: 11.851: [GC 98328K->93620K(130112K), 0.0082960 secs] -XX:+PrintGCApplicationConcurrentTime: 各ゴミ収集前のアプリケーションの中断されない実行時間を出力します。上記と混在可能 出力:アプリケーション時間:0.5291524秒 -XX:+PrintGCApplicationStoppedTime: ゴミ収集中にアプリケーションが停止した時間を出力します。上記と混在可能 出力: アプリケーションスレッドが停止した合計時間: 0.0468229 秒 -XX:PrintHeapAtGC: GC 前後の詳細なスタック情報を出力 出力: 34.702: [GC {Heapbefore gc invocations=7: def new generation total 55296K, used 52568K [0x1ebd0000, 0x227d0000, 0x227d0000) eden space 49152K, 99% used [0x1ebd0000, 0x21bce430, 0x21bce430, 0x21bce430, 0x21bce430].0x21bce430, 0x21bd0000) スペース6144Kからスペース6144Kへ、使用率55% [0x221d0000, 0x22527e10, 0x227d0000) スペース6144Kからスペース6144Kへ、使用率0% [0x21bd0000, 0x21bd0000, 0x221d0000)在職世代合計69632K、使用2696K [0x227d0000、0x26bd0000、0x26bd0000)空間69632K、3%使用[0x227d0000、0x22a720f8、0x22a72200、0x26bd0000]。0x26bd0000) compacting perm gen total 8192K, used 2898K [0x26bd0000, 0x273d0000, 0x2abd0000) the space 8192K, 35% used [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 new世代合計 55296K、使用 3433K [0x1ebd0000, 0x227d0000, 0x227d0000) eden スペース 49152K、使用 0% [0x1ebd0000, 0x1ebd0000, 0x21bd0000) from スペース6144K, 55% 使用 [0x21bd0000, 0x21f2a5e8, 0x221d0000) からスペース 6144K, 0% 使用 [0x221d0000, 0x221d0000, 0x227d0000) テニュア世代合計 69632K, 使用 3182K [0x222d0000, 0x227d0000) eden スペース 49152K.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:filename: 上記と組み合わせて使用し、関連するログ・メッセージを解析用のファイルに記録します。共通設定概要 ヒープ設定 -Xms:初期ヒープサイズ -Xmx:最大ヒープサイズ -XX:NewSize=n:若い世代のサイズを設定します -XX:NewRatio=n:若い世代と古い世代の比率を設定します。XX:SurvivorRatio=n:若い世代の2つのSurvivorゾーンに対するEdenゾーンの比率。サバイバーゾーンが2つあることに注意。例:3、は Eden:Survivor=3:2 を意味し、1つの Survivor ゾーンが若い世代全体の 1/5 を占めます -XX:MaxPermSize=n:永続的な世代のサイズを設定します コレクターの設定 -XX:+UseSerialGC:シリアルコレクターを設定します -XX:+UseParallelGC:パラレルコレクターを設定します -XX:+。UseParalledlOldGC:並列旧世代コレクタを設定 -XX:+UseConcMarkSweepGC:並列コレクタを設定 ガベージコレクション統計 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc.filename 並列コレクタの設定 -XX:ParallelGCThreads=n: 並列コレクタが収集に使用する CPU の数を設定します。並列収集スレッド数。-XX:MaxGCPauseMillis=n:並列収集の最大休止時間を設定します -XX:GCTimeRatio=n:プログラム実行時間に対するゴミ収集時間の割合を設定します。計算式は 1/ コンカレントコレクタ設定 -XX:+CMSIncrementalMode:インクリメンタルモードに設定します。シングル CPU の場合に適用されます。-XX:ParallelGCThreads=n:並行コレクタ若い世代の収集モードが並行である場合に使用する CPU の数を設定します。並列収集スレッド数。
チューニングのまとめ