在 java 的 bin 目錄下,jdk 提供了不少使用的工具,下面學習一些監控和故障處理的工具。java
名稱 | 做用 |
---|---|
jps | JVM process status tool,顯示指定系統內全部的 HotSpot 虛擬機進程 |
jstat | JVM statistics monitoring tool,用於收集 HotSpot 虛擬機各方面的運行數據 |
jinfo | 顯示虛擬機配置信息 |
jmap | 生產虛擬機的內存快照 dump 文件 |
jhat | 分析 dump 文件 |
jstack | 顯示虛擬機的線程快照 |
jps 的命令格式:web
jps [options] [hostid]app
1
2
3
4
5
6
7
|
>jps -l
25330
sun.tools.jps.Jps
25296
>jps -lv
25356
sun.tools.jps.Jps -Dapplication.home=/Library/Java/JavaVirtualMachines/jdk1.
7
.0_71.jdk/Contents/Home -Xms8m
25296
-Dosgi.requiredJavaVersion=
1.6
-XstartOnFirstThread -Dorg.<span
class
=
"wp_keywordlink"
><a href=
"http://res.importnew.com/eclipse"
title=
"Eclipse ImportNew主頁"
target=
"_blank"
>Eclipse</a></span>.swt.
internal
.carbon.smallFonts -XX:MaxPermSize=256m -Xms40m -Xmx512m -Xdock:icon=../Resources/Eclipse.icns -XstartOnFirstThread -Dorg.eclipse.swt.
internal
.carbon.smallFonts
|
jps 能夠查看經過 rmi 協議查詢開啓了 rmi 服務的原創虛擬機進程狀態,hostid 是 rmi 註冊表中註冊的主機。eclipse
jps 有以下主要的選項:ide
選項 | 做用 |
---|---|
-q | 只輸出 LVMID,省略主類的名稱 |
-m | 輸出虛擬機啓動時候傳遞給 main 方法的參數 |
-l | 輸出類的全名 |
-v | 輸出虛擬機進程啓動時 JVM 參數 |
jstat 能夠顯示本地或者遠程虛擬機進程中的類裝載、內存、垃圾收集、 JIT 編譯等運行數據。工具
jstat 的命令格式:學習
jstat [option vmid [interval] [count]]ui
例如:this
1
2
3
4
5
6
7
|
>jstat -gcutil
25296
1000
5
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00
99.54
90.43
93.70
95.23
55
1.156
5
1.990
3.146
0.00
99.54
90.43
93.70
95.23
55
1.156
5
1.990
3.146
0.00
99.54
90.43
93.70
95.23
55
1.156
5
1.990
3.146
0.00
99.54
90.43
93.70
95.23
55
1.156
5
1.990
3.146
0.00
99.54
90.43
93.70
95.23
55
1.156
5
1.990
3.146
|
查詢 25296 進程的虛擬機情況,而且每隔 1000 毫秒一次,顯示 5 次。spa
看下主要選項的含義:
選項 | 做用 |
---|---|
-class | 監視類裝載、卸載數量、總看見以及類裝載消耗的時間 |
-gc | 監視 java 堆情況,包括 eden 區、兩個 survivor 區、年老代、永久代等的容量、已用空間、gc 時間合計等 |
-gccapacity | 內容與 -gc 基本相同,輸出主要關注 java 堆各個區使用到的最大、最小空間 |
-gcutil | 內容與 -gc 基本相同,關注已使用區域佔總空間的百分比 |
-gccause | 內容與 -gcutil 同樣,而且多輸出致使上一次 gc 產生的緣由 |
-gcnew | 監視新生代情況 |
-gcnewcapacity | 與 -gcnew 相同,主要關注使用到的最大、最小空間 |
-compiler | 輸出 JIT 編譯器編譯過的方法、耗時等信息 |
下面解讀下 -gcutil 所產生的內容:
S0、S1 分別表明了 Survivor0 和 Survivor1,E 表明 Eden 區,O 表明老年區, P 表明永久代。YGC 表明 Young GC 的次數,YGCT 表明時間,後面同樣解釋。
這個命令比較簡單,直接看自帶的描述:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
Usage:
jinfo [option] <pid>
(to connect to running process)
jinfo [option] <executable <core>
(to connect to a core file)
jinfo [option] [server_id@]<remote server IP or hostname>
(to connect to remote debug server)
where <option>
is
one of:
-flag <name> to print the value of the named VM flag
-flag [+|-]<name> to enable or disable the named VM flag
-flag <name>=<value> to
set
the named VM flag to the given value
-flags to print VM flags
-sysprops to print Java system properties
<no option> to print both of the above
-h | -help to print
this
help message
|
jmap 除了能夠生成 dump 文件外,還能夠查詢 finalize 執行隊列,java 堆和永久代的詳細信息,如空間使用率和當前用的是哪一種收集器等。
具體的 jamp 如何操做部多介紹,看下面提供的說明,比較簡單:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
Usage:
jmap [option] <pid>
(to connect to running process)
jmap [option] <executable <core>
(to connect to a core file)
jmap [option] [server_id@]<remote server IP or hostname>
(to connect to remote debug server)
where <option>
is
one of:
<none> to print same info
as
Solaris pmap
-heap to print java heap summary
-histo[:live] to print histogram of java object heap;
if
the
"live"
suboption
is
specified, only count live objects
-permstat to print permanent generation statistics
-finalizerinfo to print information on objects awaiting finalization
-dump:<dump-options> to dump java heap
in
hprof binary format
dump-options:
live dump only live objects;
if
not specified,
all objects
in
the heap are dumped.
format=b binary format
file=<file> dump heap to <file>
Example: jmap -dump:live,format=b,file=heap.bin <pid>
-F force. Use
with
-dump:<dump-options> <pid> or -histo
to force a heap dump or histogram when <pid> does not
respond. The
"live"
suboption
is
not supported
in
this
mode.
-h | -help to print
this
help message
-J<flag> to pass <flag> directly to the runtime system
|
咱們能夠使用 jhat 來分析 jmap 生成的 dump 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
|
>jhat tmp.dump
Reading from tmp.dump...
Dump file created Sat May
09
17
:
10
:
52
CST
2015
Snapshot read, resolving...
Resolving
0
objects...
WARNING: hprof file does not
include
java.lang.Class!
WARNING: hprof file does not
include
java.lang.
String
!
WARNING: hprof file does not
include
java.lang.ClassLoader!
Chasing references, expect
0
dots
Eliminating duplicate references
Snapshot resolved.
Started HTTP server on port
7000
Server
is
ready.
|
默認會開 7000 端口進行 web 訪問。通常不使用這個命令來分析,會使用專業的工具來分析 dump 文件,如 eclipse memory analyzer 等。
jstack 用來生成當前時刻線程快照。
使用方式以下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
Usage:
jstack [-l] <pid>
(to connect to running process)
jstack -F [-m] [-l] <pid>
(to connect to a hung process)
jstack [-m] [-l] <executable> <core>
(to connect to a core file)
jstack [-m] [-l] [server_id@]<remote server IP or hostname>
(to connect to a remote debug server)
Options:
-F to force a thread dump. Use when jstack <pid> does not respond (process
is
hung)
-m to print both java and
native
frames (mixed mode)
-l long listing. Prints additional information about locks
-h or -help to print
this
help message
|
【參考資料】