ホームページ >Java >&#&チュートリアル >Java JVM 仮想マシンのチューニング方法
jmap histo /pid > ./log.txt: プロセスのインスタンス数、占有メモリのバイト数、およびプロセスが属するクラスを表示します
jmap -heap /pid: ヒープ情報の表示
#jmap ‐dump:format =b, file=app.hprof /pid jvisualvm コマンドを使用して jvm ビジュアル管理インターフェイスを開始し、ダンプ ファイルをインポートします。分析: クラスのインスタンスの表示 jstackデッドロックの分析: デッドロック コードの一部の作成public class DeadLockTest { private final static Object lock1 = new Object(); private final static Object lock2 = new Object(); public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { synchronized (lock1) { try { System.out.println(Thread.currentThread().getName() + ": get the lock1"); Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (lock2) { System.out.println(Thread.currentThread().getName() + ": get the lock2"); } } } }).start(); new Thread(new Runnable() { @Override public void run() { synchronized (lock2) { try { System.out.println(Thread.currentThread().getName() + ": get the lock2"); Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (lock1) { System.out.println(Thread.currentThread().getName() + ": get the lock1"); } } } }).start(); } }
"Thread- 1" スレッド名; prio=5 priority=5; tid=0x0000000019aa9000 スレッド ID; nid=0x6c4 スレッドに対応するローカル スレッド ID nid; java.lang.Thread.State: BLOCKED スレッド状態Start jvisualvm コマンド デッドロック スレッドを表示するには、対応するプロセスを選択します。 Jstack は、CPU 使用率が高いスレッドのスタック情報を分析します。while ループを開始して、 CPU を動作させ続ける1. top -p /pid: プロセスのリソース使用量を確認します プロセスが CPU の使用状況を引き起こしていることは明らかです使用率はほぼ100%です。 2. H を押して、プロセス内の各スレッドが占有しているリソースを表示します #3. ほぼ 100% 使用している PID 列を見つけます。 CPU は、スレッド tid が 5027 であることを示し、コンバータ 4 を介して 16 進数の 13a3 に変換します。jstack コマンドで jstack 5026|grep -A 10 13a3 を実行すると、スレッド tid 13a3 のスタック情報を取得できます。を実行し、原因を特定します。 CPU 使用率が 100% の実行行番号
##jinfo View jvm systemparameters
jinfo -sysprops /pid: java
##Jstat のシステム パラメータを表示します。 ヒープ メモリの使用量とクラスの読み込み量を表示します。情報
jstat -gc /pid: ガベージ コレクション統計S0C: 最初の生存領域のサイズ (KB 単位)、S1C: 2 番目のサバイバー エリア、S0U: 最初のサバイバー エリアの使用サイズ、S1U: 2 番目のサバイバー エリアの使用サイズ、EC: エデン ガーデンのサイズ、EU: エデン ガーデンの使用サイズ、OC: 旧世代サイズ; OU: 旧世代の使用サイズ; MC: メソッド領域サイズ (メタスペース); MU: メソッド領域使用サイズ; CCSC: 圧縮クラス空間サイズ; CCSU: 圧縮クラス空間使用サイズ; YGC: 若い世代のガベージ数コレクション;YGCT: 若い世代のガベージ コレクション消費時間、単位 s;FGC: 古い世代のガベージ コレクションの数; FGCT: 古い世代のガベージ コレクション消費時間、単位 s;GCT: 合計ガベージ コレクション消費時間、単位 s
jstat -gccapacity/pid: ヒープ メモリ統計NGCMN: 新しい世代の最小容量、NGCMX: 新しい世代の最大容量、NGC: 現在の容量新世代のサイズ、S0C: 最初の生存エリアのサイズ、S1C: 2 番目の生存エリアのサイズ、EC: エデン キャンパスのサイズ、OGCMN: 旧世代の最小容量、OGCMX: の最大容量古い世代; OGC: 現在の古い世代のサイズ; OC: 現在の古い世代のサイズ; MCMN: 最小メタデータ容量; MCMX: 最大メタデータ容量; MC: 現在のメタデータ スペース サイズ; CCSMN: 最小圧縮クラス スペース サイズ; CCSMX:最大圧縮クラス スペース サイズ; CCSC: 現在の圧縮クラス スペース サイズ; YGC: 若い世代の GC の数; FGC: 古い世代の GC の数
jstat -gcnew /pid: 新しい世代のガベージ コレクション統計の表示TT: オブジェクトが新しい世代で生き残る回数、MTT: オブジェクトが新しい世代で生き残る最大回数、DSS: 予想される生存領域サイズ
jstat -gcnewcapacity/pid: 新世代メモリ容量の確認S0CMX: 最大生存領域サイズ 1; S1CMX: 最大生存領域サイズ 2 ゾーンサイズ; ECMX: Eden ゾーンの最大サイズ
jstat -gcold /pid: 古い世代のガベージ コレクション統計の表示 ##jstat -gcoldcapacity/pid: 古い世代のガベージ コレクション統計の表示年齢メモリCapacity jstat -gcmetacapacity/pid: メタデータ スペース統計の表示jstat gc -pid コマンドを使用して、Java アプリケーションの起動パラメータを最適化できます。jstat -gc pid 1000 10 (コマンドを 1 秒ごとに、合計 10 回実行します) に追加される新しいオブジェクトの数を推定します。 1 秒あたりのエデンの面積。時間は特定の結果に基づいて調整できます。実際、最適化のアイデアは、各 Young GC 後に生き残るオブジェクトを Survivor 領域の 50% 未満にし、それらを若い世代に保持することを試みるだけです。オブジェクトが古い時代に入らないようにしてください。頻繁なフル GC による JVM パフォーマンスへの影響を避けるために、フル GC の頻度をできる限り減らすようにしてください。
JVM レベルのメモリなど、一部の古いデータの場合、メモリが時間内にクリーンアップされず、ますます多くのデータが蓄積され、時間が経つとメモリがいっぱいになることがよくあります。 gc であるため、メモリ損失のリークが発生します。 LRU データ削除戦略を実装した成熟したキャッシュ アーキテクチャ ehcache を使用できます。
以上がJava JVM 仮想マシンのチューニング方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。