6 JDKにはJVMチューニングツールが付属していますが、本当にできると思いますか?

jpsとjstatチューニングツールについてはすでに説明しました今日は、他の4つのツールについて話し続けます。これらのツールは、jdkのbinディレクトリにあります。

194f45015a96f546ea2edbcb322b23ed.png

jinfoツールの使用方法34c6646acf84e2ffbc053d57a6e8c84d.png

jinfo仮想マシンの構成情報を表示します。対応するパラメーターはjinfo--helpで確認できます。

061c126d1934f642c4b3144dbe3d91be.png

オプションの説明

すべてのパラメータとシステム属性を出力するオプションはありません

-フラグ名は、名前に対応するパラメータを出力します

-flag [+ |-] nameは、名前に対応するパラメーターをオンまたはオフにします

-flag name = valueは、名前に対応するパラメーターを設定します

-フラグはすべてのパラメータを出力します

-sysprops  出力システムのプロパティ

最初にjpsfindを使用できますpid

36fe245f0347fc79cd135e74f2be915f.png

jinfo pidたくさんの関連情報を出力します

498762b397412055437729fc9adad6e9.png


21ec30972fa119a3f5b224c96f7ff449.png

jinfo -flags pid

出力に使用されるJVMすべてのパラメーター

55a9abd718c4a9472081a1e33e71215e.png

jinfo -flag name pid

このコマンドを使用してJVM指定した名前の値をパラメーターとして表示し ます。

例:現在のJVMプロセスで印刷とGCログがオンになっているかどうかを確認し ます

b316a065f9755004075e3d19b1636c1f.png

同じことが使用できます

jinfo -flag [+|-]name pid

対応する名前のパラメーターをオンまたはオフにします。

使用することもできます

jinfo -sysprops pid

現在のJVMすべてのシステムプロパティを出力 するには

jmapツールの使用方法34c6646acf84e2ffbc053d57a6e8c84d.png

jmap(Java Memory Map) コマンド。主に、指定されたJavaプロセス(またはコアファイル、リモートデバッグサーバー)の共有オブジェクトメモリマップまたはヒープメモリの詳細を出力するために使用されます。プログラムのダンプファイルjmapを生成する javaために、ヒープ内のオブジェクトサンプルの統計情報、表示されたClassLoader 情報、および finalizer キューを表示することもできます。

jmapコマンドJVM実行中のヒープのスナップショットを取得できるため、ヒープをオフラインで分析してメモリリークをチェックしたり、パフォーマンスに深刻な影響を与えるいくつかの大きなオブジェクトの作成をチェックしたり、システム内で最も多いオブジェクトをチェックしたり、さまざまなオブジェクトが占めるメモリのサイズをチェックしたりできます。 。jmapを使用してヒープダ​​ンプを生成できます。

メモリ=直接メモリ(直接メモリ)+ JVM memory(MaxPermSize +Xmx);

jmap --help補助情報を印刷する

9a3bb4f02f74b9dd9a2aaa24d1c83e1b.png

オプションの説明

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内部クラス名の前には「*」が付きます。ライブサブパラメータを追加すると、ライブオブジェクトの数のみがカウントされます。

-clstatsJDK8クラスローダー情報の以前の印刷を置き換えますpermstat)印刷classloadおよびjvm heap永続的なレイヤー情報。各classloader名前、アクティビティ、アドレス、親classloader、およびロードされたクラスの数が含まれます

名前付きJVMヒープ情報を使用する

jmap -heap pid

詳細なJavaヒープ情報を出力します。

ff7abc194ba5f248b2bae525e700b6f4.png

使用する

jmap -histo:live pid

ヒープ内のオブジェクトに関する統計を出力します。

最初の列はシリアル番号です。

2番目の列はオブジェクトの数です。

3番目の列はオブジェクトサイズバイトです。

4列目はクラス名です

5a1387a65d283ac04d301d344ff478f8.png

使用する

jmap -finalizerinfo pid

終了を待機しているオブジェクトに関する情報を出力します

8ef2f7bbd700c1d236d38483a2438b7b.png

使用することもできます

jmap -clstats pid

クラスローダー情報を出力します。

ad138605e7bfb4df94f310df90246ec6.png


jstackツールの使用方法ca61290997ff15086d34d60f1741a04f.png

jstackこのコマンドの最大の機能は、スレッドダンプファイルを生成することです。スレッドダンプファイルは、特定の時間にCPU情報を記録します。

jstackjavaに、現時点で仮想マシンのスレッドスナップショットを生成するために使用されます。スレッドスナップショットはjava現在の仮想マシンの各スレッドによって実行されているメソッドスタックのコレクションです。スレッドスナップショットを生成する主な目的は、スレッドの長い一時停止の原因を特定することです。

スレッド間のデッドロック、無限ループ、外部リソースの要求による長い待機など。

スレッドが停止した場合、jstack各スレッドの呼び出しスタックを調べることで、応答しないスレッドがバックグラウンドで何を行っているか、またはどのリソースを待機しているかを知ることができます。現在実行中のjavaプログラムがハング状態を示している場合jstackに非常に役立ちます。

34c6646acf84e2ffbc053d57a6e8c84d.png

書かれたオプション

-F:通常出力の要求に応答しない場合、スレッドスタックは強制的に出力されます。
-l:スタックに加えて、追加のロック情報が出力されます。デッドロックが発生した場合、jstack -l pidを使用してロック保持状況を監視できます。-  
m:ローカルメソッドを呼び出すと、C / C ++スタックを表示できます。

jstack pid

jstackコマンドは、ユーザーが開始したスレッドとJVMバックグラウンドスレッドを含む、すべてのスレッドを出力します。私たちの主な関心事はユーザースレッドです。

4fc4c1c7bb6977f40ce34512f141e403.png


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ツールの使用方法34c6646acf84e2ffbc053d57a6e8c84d.png

JVM Heap Analysis Toolこのコマンドはjmapjmap生成されたダンプを分析するためにコマンドと組み合わせて使用さ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}

実行し、jpsgetプロセスを使用しますpid

0019d28cfcd21f0b5d1e2a054b1ab1c5.png

再利用jmap -dump:format=b,file=heapDump pid

4130993585ee55bbfbb701f63646275c.png

次に、heapDumpに対応するパッケージディレクトリに移動して実行します

jhat heapDump

dfa51802e4e78397d7ba5ac3a6a21e2f.png

その後、アクセスできます

http:// localhost:7000 /

e4b52350786df5fbc25d9444a097a76a.png

一般に、ヒープの異常な状況の表示は、主に次の2つの部分に依存します。

すべてのクラス(プラットフォームを除く)、プラットフォーム外のすべてのオブジェクト情報のインスタンス数を表示します以下に示すように:

5c1b7a1c2ae3e9eed4ae3ec521ba6fce.png

ヒープヒストグラムを  表示すると、ヒープの状況がツリー図の形式で表示されます

ea8e18c64256d79da9be60a64deaa6df.png

特定の問題をトラブルシューティングするときは、コードを組み合わせて、リサイクルする必要のある多数のオブジェクトが参照されているかどうか、またはリサイクルできない大量のメモリを消費するオブジェクトがあるかどうかを確認する必要があります。 

おすすめ

転載: blog.51cto.com/10983206/2551893