jpsとjstatチューニングツールについてはすでに説明しました。今日は、他の4つのツールについて話し続けます。これらのツールは、jdkのbinディレクトリにあります。
jinfoツールの使用方法
jinfo
仮想マシンの構成情報を表示します。対応するパラメーターはjinfo--helpで確認できます。
オプションの説明
すべてのパラメータとシステム属性を出力するオプションはありません
-フラグ名は、名前に対応するパラメータを出力します
-flag [+ |-] nameは、名前に対応するパラメーターをオンまたはオフにします
-flag name = valueは、名前に対応するパラメーターを設定します
-フラグはすべてのパラメータを出力します
-sysprops
出力システムのプロパティ
最初にjps
findを使用できますpid
。
jinfo pid
たくさんの関連情報を出力します
jinfo -flags pid
出力に使用されるJVM
すべてのパラメーター
jinfo -flag name pid
このコマンドを使用してJVM
、指定した名前の値をパラメーターとして表示し ます。
例:現在のJVM
プロセスで印刷とGC
ログがオンになっているかどうかを確認し ます。
同じことが使用できます
jinfo -flag [+|-]name pid
対応する名前のパラメーターをオンまたはオフにします。
使用することもできます
jinfo -sysprops pid
現在のJVM
すべてのシステムプロパティを出力 するには
jmapツールの使用方法
jmap(Java Memory Map)
コマンド。主に、指定されたJavaプロセス(またはコアファイル、リモートデバッグサーバー)の共有オブジェクトメモリマップまたはヒープメモリの詳細を出力するために使用されます。プログラムのダンプファイルjmap
を生成する java
ために、ヒープ内のオブジェクトサンプルの統計情報、表示されたClassLoader
情報、および finalizer
キューを表示することもできます。
jmap
コマンドJVM
は実行中のヒープのスナップショットを取得できるため、ヒープをオフラインで分析してメモリリークをチェックしたり、パフォーマンスに深刻な影響を与えるいくつかの大きなオブジェクトの作成をチェックしたり、システム内で最も多いオブジェクトをチェックしたり、さまざまなオブジェクトが占めるメモリのサイズをチェックしたりできます。 。jmapを使用してヒープダンプを生成できます。
メモリ=直接メモリ(直接メモリ)+ JVM memory(MaxPermSize +Xmx)
;
jmap --help
補助情報を印刷する
オプションの説明
pid
:JavaプロセスID、コマンドps -ef | grep java
取得、またはjps
ツール取得実行可能:コアダンプを生成する
java
実行可能ファイルコア:構成情報を出力する必要があるコアファイル
remote-hostname-or-ip:リモートデバッグ用のhostnameまたはip
server-id:オプションの一意のID。複数のデバッグサーバーが同じリモートホストで実行されている場合は、このオプションパラメーターを使用してサーバーを識別します。
-dump:[live、] format = b、file = hprofバイナリ形式を使用して、jvmのヒープコンテンツをfile =に出力します。liveサブオプションはオプションです。liveオプションが指定されている場合、ライブオブジェクトのみがファイルに出力されます。
-finalizerinfo収集を待機しているオブジェクトに関する情報を出力します。
-heapヒープの要約情報、GCで使用されるアルゴリズム、ヒープの構成、および賢明なヒープの使用法を出力します。
-histo[:live]
各クラスのインスタンス数、メモリ使用量、クラスのフルネームを出力します。JVM
内部クラス名の前には「*」が付きます。ライブサブパラメータを追加すると、ライブオブジェクトの数のみがカウントされます。
-clstats
(JDK8
クラスローダー情報の以前の印刷を置き換えますpermstat
)印刷classload
およびjvm heap
永続的なレイヤー情報。各classloader
名前、アクティビティ、アドレス、親classloader
、およびロードされたクラスの数が含まれます。
名前付きJVM
ヒープ情報を使用する
jmap -heap pid
詳細なJavaヒープ情報を出力します。
使用する
jmap -histo:live pid
ヒープ内のオブジェクトに関する統計を出力します。
最初の列はシリアル番号です。
2番目の列はオブジェクトの数です。
3番目の列はオブジェクトサイズバイトです。
4列目はクラス名です
使用する
jmap -finalizerinfo pid
終了を待機しているオブジェクトに関する情報を出力します
使用することもできます
jmap -clstats pid
クラスローダー情報を出力します。
jstackツールの使用方法
jstack
このコマンドの最大の機能は、スレッドダンプファイルを生成することです。スレッドダンプファイルは、特定の時間にCPU情報を記録します。
jstack
主java
に、現時点で仮想マシンのスレッドスナップショットを生成するために使用されます。スレッドスナップショットはjava
、現在の仮想マシンの各スレッドによって実行されているメソッドスタックのコレクションです。スレッドスナップショットを生成する主な目的は、スレッドの長い一時停止の原因を特定することです。スレッド間のデッドロック、無限ループ、外部リソースの要求による長い待機など。
スレッドが停止した場合、
jstack
各スレッドの呼び出しスタックを調べることで、応答しないスレッドがバックグラウンドで何を行っているか、またはどのリソースを待機しているかを知ることができます。現在実行中のjava
プログラムがハング状態を示している場合jstack
に非常に役立ちます。
書かれたオプション
-F:通常出力の要求に応答しない場合、スレッドスタックは強制的に出力されます。
-l:スタックに加えて、追加のロック情報が出力されます。デッドロックが発生した場合、jstack -l pidを使用してロック保持状況を監視できます。-
m:ローカルメソッドを呼び出すと、C / C ++スタックを表示できます。
jstack pid
jstackコマンドは、ユーザーが開始したスレッドとJVM
バックグラウンドスレッドを含む、すべてのスレッドを出力します。私たちの主な関心事はユーザースレッドです。
1"http-nio-8080-exec-8" #26 daemon prio=5 os_prio=0 tid=0x000000005b940000 nid=0x1e2c waiting on condition [0x000000005c0be000] java.lang.Thread.State: WAITING (parking)
http-nio-8080-exec-8
:スレッド名デーモンは、スレッドがデーモンスレッドであるかどうかを示します
prioは、スレッドに設定した優先度を表します
os_prioは、対応するオペレーティングシステムスレッドの優先度を示します。すべてのオペレーティングシステムがスレッド優先度をサポートしているわけではないため、0に設定できます。
tidは、javaでのこのスレッドのIDです。
nidは、このスレッドに対応するオペレーティングシステムのネイティブスレッドIDであり、各javaスレッドには対応するオペレーティングシステムスレッドがあります。
待機条件は、現在のスレッドが待機状態にあることを示しますが、特定の理由はリストされていません
java.lang.Thread.StatC:\ Users \ Administrator \ Desktop \ WAITING(parking)は、待機状態にあることも示します。括弧内の内容は、待機の理由を説明しています。たとえば、ここでの駐車の説明は、LockSupport.parkメソッドが呼び出されるためです。待っている原因
一般的なコマンド
1# 查询进程的线程信息 输出到jstatck_13324文件中
2jstack 13324 > jstatck_13324
3# 十进制转换为十六进制
4printf "%x\n" 21742
jhatツールの使用方法
JVM Heap Analysis Tool
このコマンドはjmap
、jmap
生成されたダンプを分析するためにコマンドと組み合わせて使用されjhat
ます。ミニHTTP / HTMLサーバーが組み込まれています。ダンプ分析結果を生成した後、ブラウザーで表示できます。jhatは時間とハードウェアリソースを消費するプロセスであるため、分析は通常、サーバー上で直接実行されないことに注意してください。通常、サーバーによって生成されたダンプファイルは、分析のためにローカルマシンまたは他のマシンにコピーされます。
一般的な方法
1#分析 dump 文件
2jhat -J-Xmx512M dump.phrof
3
4#对比 dump 文件
5jhat -baseline dump2.phrof dump1.phrof
コードケース
1public class JhatTest {
2 public static void main(String[] args) {
3 while(true) {
4 String string = new String("老田");
5 System.out.println(string);
6 }
7 }
8}
実行し、jps
getプロセスを使用しますpid
再利用jmap -dump:format=b,file=heapDump pid
次に、heapDumpに対応するパッケージディレクトリに移動して実行します
jhat heapDump
その後、アクセスできます
http:// localhost:7000 /
一般に、ヒープの異常な状況の表示は、主に次の2つの部分に依存します。
すべてのクラス(プラットフォームを除く)、プラットフォーム外のすべてのオブジェクト情報のインスタンス数を表示します。以下に示すように:
ヒープヒストグラムを 表示すると、ヒープの状況がツリー図の形式で表示されます
特定の問題をトラブルシューティングするときは、コードを組み合わせて、リサイクルする必要のある多数のオブジェクトが参照されているかどうか、またはリサイクルできない大量のメモリを消費するオブジェクトがあるかどうかを確認する必要があります。