まず、使用JPSは、JavaアプリケーションのプロセスIDを取得します
(Java仮想マシンプロセスステータスツール)
JPSの出力は、主ステータス情報を実行しているJVMを処理するために使用されます。構文は次のとおりです。
JPS [オプション] [ホストID]
あなたはそれを現在のホストのホストIDまたはサーバーへのデフォルト値を指定しない場合。
次のようにコマンドラインパラメータオプションは以下のとおりです。
-qクラス名、JAR名、着信mainメソッドのパラメータを出力しないでください
mainメソッドに渡された-m出力パラメータ
-l出力メインクラスまたはJARの完全修飾名
JVMに渡さ-v出力パラメータ
次のような:
ルート@ Ubuntuの:/#JPS -m -l
2458 org.artifactory.standalone.main.Main /usr/local/artifactory-2.2.5/etc/jetty.xml
29920 com.sun.tools.hat.Main -port 9998 /tmp/dump.dat
3149 org.apache.catalina.startup.Bootstrap開始
30972 sun.tools.jps.Jps -m -l
8247 org.apache.catalina.startup.Bootstrap開始
25687 com.sun.tools.hat.Main -port 9999 dump.dat
21711 MRF-center.jar
第二に、プロセス番号を介してスレッド内の最もCPU集約型のプロセスを識別するために、
トップ-HPのPID(一般的に推奨)、メモリ消費量が21742を取得するために、スレッドのID番号を追跡することを選択し、スレッドIDを取得
各JavaスレッドはCPU時間を消費しているIMEの欄には、CPU時間は、スレッド21742の最長のスレッドIDです
printfの "%xとする\ n" 21742
21742 16進数値54eeを取得し、次のように使用されます。
使用のprintf「%X \ n」はスレッドIDは16進値に変換または手スレッドID値によって算出される16進数に変換されます。
第三に、使用jstackクエリメモリ消費量の値コードレベルがターゲット。
構文は次のとおりです。
jstackプロセスID |はgrep(変換後の16進スレッドID値)は、コードレベルに配置することができます。
ルート@ Ubuntuの:/#jstack 21711 | グレップの54ee
"PollIntervalRetrySchedulerThread" PRIO = 10 TID = 0x00007f950043e000 NID = 0x54eeはObject.waitにおける()[0x00007f94c6eda000]
CPUの消費量)は、このクラスPollIntervalRetrySchedulerThreadはObject.wait(で見ることができます
Javaプロセスの情報を表示するために使用メインスレッドのスタックをjstack。構文は次のとおりです。
jstack [オプション] PID
jstack [オプション]実行コア
jstack [オプション]、[サーバのid @]リモート・ホスト名またはIP-
次のようにコマンドラインパラメータオプションは以下のとおりです。
-l長いリストは、デッドロックが発生した場合、追加のロック情報がjstack -l PIDロックの保有-m混合モードを観察するために使用することができるプリントアウトされます、だけでなく、出力Javaは情報をスタック++の情報は、C / Cで印刷されますスタックします(例えば、ネイティブメソッドのような)
jstackは、それが使用JVMのパフォーマンスチューニングに非常に多くあるので、我々は、特定のコードをターゲットにすることができた情報によると、スタックをスレッドスタックを見つけることができます。コマンド使用のps、トップ、printf関数、jstack、グレップがある、のは、位置情報を最もCPU集中型Javaスレッドは、Javaプロセスのインスタンスを検索し、スタックしてみましょう。
四は、JSTAT(JVM統計監視ツール)FullGC状況を監視し、システムのFullGC周波数を取得します。
構文は次のとおりです。
JSTAT [generalOption | outputOptions VMID [間隔[秒| MS] [カウント]]]
VMIDは、一般的にはLinuxの/ Unixシステム上のプロセスIDがあり、Java仮想マシンのIDです。間隔はサンプリング間隔です。カウントはサンプルの数です。GCの例は、以下の情報は、出力が、サンプリング時間間隔は250ミリ秒、サンプル数が4です。
ルート@ Ubuntuの:/#JSTAT 21711 250 4 -gc
S0C S1C S0U S1U EC EU OC OR PC PU YGC YGCT FGCのGCTFのGCT
192.0 192.0 64.0 0.0 6144.0 1854.9 4111.6 32000.0 55296.0 25472.7 702 0.431 3 0.218 0.649
192.0 192.0 64.0 0.0 6144.0 1972.2 4111.6 32000.0 55296.0 25472.7 702 0.431 3 0.218 0.649
192.0 192.0 64.0 0.0 6144.0 1972.2 4111.6 32000.0 55296.0 25472.7 702 0.431 3 0.218 0.649
192.0 192.0 64.0 0.0 6144.0 2109.7 4111.6 32000.0 55296.0 25472.7 702 0.431 3 0.218 0.649
上記の列の意味を理解するために、JVMのヒープメモリのレイアウトを見て:
それは見ることができます。
古い世代の若い世代のヒープメモリは= + +永続的な世代
+ =エデン若い世代領域(およびまで)2つのサバイバーエリア
今、各列の意味を説明します
S0C、S1C、S0U、S1U:サバイバー0/1面積容量(キャパシティ)と量(使用されます)
EC、EU:エデンの面積の大きさと量の
OC、OU:旧世代の容量と使用状況
PC、PU:容量と使用状況の恒久的な世代
YGC、YGT:若い世代のGCの数およびGC時間がかかります
FGC、FGCT:のフルフルGCとGCは数時間のかかります
GCT:GCの合計時間
五、 jmapは(メモリマップ)和jhat(Javaヒープ解析ツール)
jmapのはjhat一般的な使用と組み合わせヒープメモリ使用量を表示するために使用されます。
次のようにjmapの構文は次のとおりです。
jmapの[オプション] PID
jmapの[オプション]実行コア
jmapの[オプション]、[サーバのid @]リモート・ホスト名またはIP-
あなたは、64ビットJVM上で実行している場合は、-J-D64オプションのコマンドパラメータを指定する必要があります。
jmapの-permstat PID
クラスローダの印刷処理とクラスローダ永続オブジェクト情報の生成、出力:以下に示すように、オブジェクトが生きているかどうかをクラスローダ名、(信頼できない)、オブジェクトのアドレス、親クラスローダは、クラスのサイズおよび他の情報をロードされています:
GCアルゴリズム、ヒープ構成パラメータ、及び各世代ヒープメモリ使用量の使用を含む、プロセスヒープメモリ使用量を表示するjmapの-heap PID使用。このような次の例のように:
ルート@ Ubuntuの:/#jmapの-heap 21711
ID 21711を処理するために取り付け、しばらくお待ちください...
デバッガが正常に取り付けられています。
サーバーのコンパイラが検出されました。
JVMのバージョンは20.10-B01であります
スレッドローカルオブジェクト割り当てを使用。
4スレッドと並列GC(S)
ヒープ構成:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 2067791872(1972.0メガバイト)
NewSizeパラメータ= 1310720(1.25メガバイト)
MaxNewSize = 17592186044415メガバイト
oldSize新しい= 5439488(5.1875メガバイト)
NewRatio = 2
SurvivorRatio = 8
PermSizeを= 21757952(20.75メガバイト)
MaxPermSizeを= 85983232(82.0メガバイト)
ヒープ使用量:
PS若い世代
エデンスペース:
容量= 6422528(6.125メガバイト)
使用= 5445552(5.1932830810546875メガバイト)
無料= 976976(0.9317169189453125メガバイト)
84.78829520089286%使用
宇宙から:
容量= 131072(0.125メガバイト)
使用= 98304(0.09375メガバイト)
無料= 32768(0.03125メガバイト)
75.0パーセント使用
空間に:
容量= 131072(0.125メガバイト)
使用= 0(0.0メガバイト)
無料= 131072(0.125メガバイト)
0.0%使用
PS旧世代
容量= 35258368(33.625メガバイト)
使用= 4119544(3.9287033081054688メガバイト)
無料= 31138824(29.69629669189453メガバイト)
11.683876009235595%使用
PSパーマ世代
容量= 52428800(50.0メガバイト)
使用= 26075168(24.867218017578125メガバイト)
無料= 26353632(25.132781982421875メガバイト)
49.73443603515625%使用
....
使用jmapのを-histoの[:ライブ]のみ、オブジェクトを生きるライブ統計に置く場合は、ヒープ・メモリ内のビューオブジェクトのPID数は、ヒストグラムの大きさは、次のように:
ルート@ Ubuntuの:/#のjmapのを-histo:ライブ21711 | もっと
numが------------------------------------------- #bytesクラス名を#instances ---
1:38445 5597736 <constMethodKlass>
2:38445 5237288 <methodKlass>
3:3500 3749504 <constantPoolKlass>
4:60858 3242600 <symbolKlass>
5:3500 2715264 <instanceKlassKlass>
6:2796 2131424 <constantPoolCacheKlass>
7:5543 1317400 [I
8:13714 1010768 [C
9:4752 1003344 [B
10:1225 639656 <methodDataKlass>
11:14194 454208 java.lang.Stringで
12:3809の396136のjava.lang.Class
13:4979 311952 [S
14:5598 287064 [[I
15:3028 266464 java.lang.reflect.Methodオブジェクト
16:280 163520 <objArrayKlassKlass>
17:4355 139360 java.util.HashMapを$エントリ
18:1869 138568 [Ljava.util.HashMap $エントリ。
2443 97720 java.util.LinkedHashMap $エントリ:19
20:2072 82880 java.lang.ref.SoftReference
21:1807 71528 [Ljava.lang.Object。
22:2206 70592 java.lang.ref.WeakReference
23:934 52304 Jawakutilklaidakedःashanap
24:871 48776 java.beans.MethodDescriptor
25:1442 46144 java.util.concurrent.ConcurrentHashMap $ HashEntry
26 804 38 592 Jawakutilkःashanap
27:948 37920 java.util.concurrent.ConcurrentHashMap $セグメント
28:1621 35696 [Ljava.lang.Class。
29:1313 34880 [Ljava.lang.String。
1396 33504 java.util.LinkedList $エントリ:30
31:462 33264をjava.lang.reflect.Field
32:1024 32768するjava.util.Hashtable $エントリ
33:948 31440 [Ljava.util.concurrent.ConcurrentHashMap $ HashEntry。
クラス名のオブジェクト型、次のように:
Bバイト
Cのchar
ダブルD
Fフロート
私はint型
長いJ
Zブール
[アレイは、[I]は、[INTを例えば表すように
他のオブジェクトへ[L +クラス名
ファイルへのプロセスのメモリ使用量のダンプをjmapの、その後の分析ビューjhat:非常に一般的な状況があるにもあります。次のようにdumpコマンド形式のjmapのは、次のとおりです。
jmapの-dump:フォーマット= B、ファイル= dumpFileName PID
上記のプロセスID 21711を実行するためにダンプします。
ルート@ Ubuntuの:/#jmapの-dump:フォーマット= B、ファイル=を/ tmp / dump.dat 21711
/tmp/dump.datするヒープをダンプ...
ヒープダンプファイル作成
ダンプファイルは、jhatと、ここでMAT、VisualVMのおよび他のツール、と見ることができます。
ルート@ Ubuntuの:/#jhat -port 9998 /tmp/dump.dat
/tmp/dump.datからの読み込み...
ダンプファイル作成火曜1月28日17時46分14秒CST 2014Snapshotは解決し、読んで...
132207のオブジェクトの解決...
参照を追いかけ、26個のドットを期待..........................
重複した参照を排除..........................
スナップショットは解決します。
ポート9998Server上のHTTPサーバの準備ができ始めました。
ダンプファイルが大きすぎる場合、あなたは-J-Xmx512mを追加する必要があり、このパラメータは、9998 /tmp/dump.dat -port -J-Xmx512mをjhat最大ヒープメモリを指定することに注意してください。の9998ビュー:あなたは、ブラウザでホストアドレスを入力することができます