JVMコマンドライン監視ツールjstat(JVM統計監視ツール)

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プログラムの古い時代のメモリ使用量が増加していることを意味します。つまり、再利用できないオブジェクトの数が増加しているため、メモリの可能性が高くなります。リーク。

おすすめ

転載: blog.csdn.net/fengsheng5210/article/details/123659743