jstatの紹介
jstat(JVM統計監視ツール):仮想マシンのさまざまな実行ステータス情報を監視するためのコマンドラインツール。ローカルまたはリモートの仮想マシンプロセスで、クラスの読み込み、メモリ、ガベージコレクション、JITコンパイルなどの実行中のデータを表示できます。
オプションパラメータは次のとおりです。
の種類 | コンテンツ | 説明する |
---|---|---|
クラスローディング関連 | -クラス | ClassLoaderの関連情報(ロードおよびアンロードされたクラスの数、合計スペース、クラスのロードに費やされた時間など)を表示します。 |
ガベージコレクション関連 | -gc | GCに関連するヒープ情報を表示します。エデンエリアの容量、2つのサバイバーエリア、旧世代、常設世代など、使用スペース、合計GC時間などの情報が含まれます。 |
-gccapacity- | 表示内容は基本的に-gcと同じですが、出力は主にJavaヒープの各領域で使用される最大および最小のスペースに焦点を当てています | |
-gcutil | 表示は基本的に-gcと同じですが、出力は合計スペースのパーセンテージとして使用済みスペースに焦点を合わせます | |
-gccause | -gcutilと同じですが、最後または現在発生しているGCの原因を追加で出力します | |
-gcnew | 新世代のGCステータスを表示する | |
-gcnewcapacity | 表示内容は基本的に-gcnewと同じで、出力は主に使用される最大および最小スペースに焦点を合わせます | |
-gcold | 老後のGCステータスを表示する | |
-gcoldcapacity | 表示内容は基本的に-gcoldと同じで、出力は主に使用される最大および最小スペースに焦点を合わせます | |
-gcpermcapacity | 常設世代が使用する最大および最小スペースを表示します | |
JIT関連 | -コンパイラ | JITコンパイラでコンパイルされたメソッドや時間のかかるメソッドなどの情報を表示します |
-printcompilation | JITコンパイルされた出力メソッド |
jstatの使用
1)統計クラスローディング情報
[root@bogon ~]# jps -l
781 sun.tools.jps.Jps
25887 org.apache.catalina.startup.Bootstrap
[root@bogon ~]# jstat -class 25887
Loaded Bytes Unloaded Bytes Time
3377 6492.3 37 53.6 30.34
コンテンツ | 説明する |
---|---|
ロード済み | ロードされたクラスの数 |
バイト | ロードされたクラスが占めるスペースのサイズ |
降ろす | ロードされていないクラスの数 |
バイト | アンロードされたクラスのフットプリントサイズ |
時間 | クラスの読み込みには時間がかかります |
1秒間隔で5回印刷
出力プログラム実行時間
jstat -class -t 25887 1000 5
ヘッダーを3回ごとに印刷します
jstat -class -h 3 -t 25887 1000
2)JITコンパイル統計を表示する
[root@bogon ~]# jps -l
8264 sun.tools.jps.Jps
7706 ParamTest.jar
25887 org.apache.catalina.startup.Bootstrap
[root@bogon ~]# jstat -compiler 7706
Compiled Failed Invalid Time FailedType FailedMethod
10 0 0 0.00 0
コンテンツ | 説明する |
---|---|
編集済み | JITによってコンパイルされたクラスの数 |
失敗した | JITコンパイルの失敗数 |
無効 | 利用できない数量 |
時間 | 時間 |
FailedType | 故障タイプ |
FailedMethod | 失敗メソッド |
jstat -printcompilation 7706
3)ガベージコレクションの統計
ごみ統計の簡単な紹介
[root@bogon ~]# jstat -gc 25887
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
2880.0 2880.0 0.0 548.0 23552.0 8410.8 58488.0 41320.5 21632.0 20846.0 2432.0 2221.7 215 1.416 3 0.247 1.663
コンテンツ | 説明する |
---|---|
S0C | 最初のサバイバーエリアのサイズ(KB) |
S1C | 2番目のサバイバーエリアのサイズ(KB) |
S0U | 最初のサバイバーエリアの使用サイズ(KB) |
S1U | 2番目のサバイバーエリアの使用サイズ(KB) |
EC | エデンエリアのサイズ(KB) |
私 | エデンエリアの使用サイズ(KB) |
OC | 古い領域のサイズ(KB) |
どこ | 旧エリアの使用サイズ(KB) |
MC | メソッドエリアサイズ(KB) |
MU | メソッド領域の使用サイズ(KB) |
CCSC | 圧縮されたクラススペースサイズ(KB) |
CCSU | 圧縮されたクラススペース使用量サイズ(KB) |
YGC | 若い世代のガベージコレクション |
YGCT | 若い世代のガベージコレクションには時間がかかります |
FGC | 老後のガベージコレクションの数 |
FGCT | 老後のガベージコレクションには時間がかかります |
GCT | ガベージコレクションの合計時間 |
oracle官方文档:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gc-ergonomics.html
デフォルトのヒープサイズ
ヒープメモリサイズが指定されていない場合、デフォルトのヒープメモリは物理メモリの1/64であり、最大ヒープメモリは物理マシンメモリの1/4または1Gです。
メタスペースに関する注意:メタスペースは自動的に拡張され、デフォルトでは制限されません。
[root@bogon ~]# jstat -gc 6619
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
1024.0 1024.0 0.0 0.0 8192.0 672.0 20480.0 0.0 4480.0 774.5 384.0 75.9 0 0.000 0 0.000 0.000
[root@bogon ~]# jinfo -flag InitialHeapSize 6619
-XX:InitialHeapSize=31457280
パーセンテージはGC使用情報を示します
可能なOOMを判断する方法は?
Javaプロセスの起動時間と合計GC時間(GCT列)、または2つの測定間の時間と合計GC時間のデルタを比較して、実行時間の割合としてGC時間を取得できます。
比率が20%を超える場合は、現在のヒープ圧力が高いことを意味します。
比率が90%を超える場合は、ヒープに空きスペースがほとんどないことを意味し、OOM例外がいつでもスローされる可能性があります。
メモリリークの可能性を判断する方法は?
ステップ1:長時間実行されるJavaプログラムでは、jstatコマンドを実行して、パフォーマンスデータの複数の行を継続的に取得し、これらのデータ行のOU列(つまり、占有されている古いメモリ)の最小値を取得できます。
ステップ2:次に、上記の操作を長い間隔で繰り返して、OUの最小値の複数のセットを取得します。これらの値が上昇傾向を示している場合は、Javaプログラムの古い時代のメモリ使用量が増加していることを意味します。つまり、再利用できないオブジェクトの数が増加しているため、メモリの可能性が高くなります。リーク。