1、jmap
在unix系統中,使用jmap --help查看jmap的參數,如下所述:
[root@localhost bin]# jmap --help
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
使用實例:
$ jmap -dump:format=b,file=outfile 6365 ---打印dump文件,文件格式是二進制,outfile文件在當前目錄,也可以制定目錄。
$ jmap -dump:live,format=b,file=outfile 6365 ----打印dump文件活的對象到文件
$ jmap -heap 6365 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情況
$ jmap -finalizerinfo 6365 打印正在回收的對象
$ jmap -histo[:live] 6365
打印每個class的實例數目,內存佔用,類全名信息. VM的內部類名字開頭會加上前綴”*”. 如果live子參數加上後,只統計活
的對象數量.
$ jmap -permstat 6365
打印classload和jvm heap長久層的信息. 包含每個classloader的名字,活潑性,地址,父classloader和加載的class數量. 另外,內部String的數量和佔用內存數也會打印出來.
2、jstat
jstat是jdk自帶一個輕量級工具。全稱爲“Java Virtual Machine statistics monitoring tool”,它位於java的bin目錄下,主要利用JVM內建的指令對Java應用程序的資源和性能進行實時的命令行的監控,包括了對Heap size和垃圾回收狀況的監控。可見,Jstat是輕量級的、專門針對JVM的工具,非常適用。
jstat工具特別強大,有衆多的可選項,詳細查看堆內各個部分的使用量,以及加載類的數量。使用時,需加上查看進程的進程id,和所選參數。參考格式如下:
jstat -options
可以列出當前JVM版本支持的選項,常見有:
- l class (類加載器)
- l compiler (JIT)
- l gc (GC堆狀態)
- l gccapacity (各區大小)
- l gccause (最近一次GC統計和原因)
- l gcnew (新區統計)
- l gcnewcapacity (新區大小)
- l gcold (老區統計)
- l gcoldcapacity (老區大小)
- l gcpermcapacity (永久區大小)
- l gcutil (GC統計彙總)
- l printcompilation (HotSpot編譯統計)
2.1、jstat -class <pid> :顯示加載的class數量,以及所佔空間等信息。
顯示列名 |
具體描述 |
Loaded |
裝載的類的數量 |
Bytes |
裝載類所佔用的字節數 |
Unloaded |
卸載類的數量 |
Bytes |
卸載類的字節數 |
Time |
裝載和卸載類所花費的時間 |
2.2、jstat -compiler <pid> 顯示VM實時編譯的數量等信息。
顯示列名 |
具體描述 |
Compiled |
編譯任務執行數量 |
Failed |
編譯任務執行失敗數量 |
Invalid |
編譯任務執行失效數量 |
Time |
編譯任務消耗時間 |
FailedType |
最後一個編譯失敗任務的類型 |
FailedMethod |
最後一個編譯失敗任務所在的類及方法 |
2.3、jstat -gc <pid>:可以顯示gc的信息,查看gc的次數,以及時間,同時可以打印時間間隔和次數。
顯示列名 |
具體描述 |
S0C |
年輕代中第一個survivor(倖存區)的容量 (KB) |
S1C |
年輕代中第二個survivor(倖存區)的容量 (KB) |
S0U |
年輕代中第一個survivor(倖存區)目前已使用空間 (KB) |
S1U |
年輕代中第二個survivor(倖存區)目前已使用空間 (KB) |
EC |
年輕代中Eden(伊甸園)的容量 (KB) |
EU |
年輕代中Eden(伊甸園)目前已使用空間 (KB) |
OC |
Old代的容量 (KB) |
OU |
Old代目前已使用空間 (KB) |
PC |
Perm(持久代)的容量 (KB) |
PU |
Perm(持久代)目前已使用空間 (KB) |
YGC |
從應用程序啓動到採樣時年輕代中gc次數 |
YGCT |
從應用程序啓動到採樣時年輕代中gc所用時間(s) |
FGC |
從應用程序啓動到採樣時old代(全gc)gc次數 |
FGCT |
從應用程序啓動到採樣時old代(全gc)gc所用時間(s) |
GCT |
從應用程序啓動到採樣時gc用的總時間(s) |
heap大小=新生代+年老代=oc+ec+s0c+s1c.
2.4、jstat -gccapacity <pid>:可以顯示,VM內存中三代(young,old,perm)對象使用和佔用大小
顯示列名 |
具體描述 |
NGCMN |
年輕代(young)中初始化(最小)的大小(KB) |
NGCMX |
年輕代(young)的最大容量 (KB) |
NGC |
年輕代(young)中當前的容量 (KB) |
S0C |
年輕代中第一個survivor(倖存區)的容量 (KB) |
S1C |
年輕代中第二個survivor(倖存區)的容量 (KB) |
EC |
年輕代中Eden(伊甸園)的容量 (KB) |
OGCMN |
old代中初始化(最小)的大小 (KB) |
OGCMX |
old代的最大容量(KB) |
OGC |
old代當前新生成的容量 (KB) |
OC |
Old代的容量 (KB) |
PGCMN |
perm代中初始化(最小)的大小 (KB) |
PGCMX |
perm代的最大容量 (KB) |
PGC |
perm代當前新生成的容量 (KB) |
PC |
Perm(持久代)的容量 (KB) |
YGC |
從應用程序啓動到採樣時年輕代中gc次數 |
FGC |
從應用程序啓動到採樣時old代(全gc)gc次數 |
2.5、jstat -gcutil <pid> 統計gc信息
顯示列名 |
具體描述 |
S0 |
年輕代中第一個survivor(倖存區)已使用的佔當前容量百分比 |
S1 |
年輕代中第二個survivor(倖存區)已使用的佔當前容量百分比 |
E |
年輕代中Eden(伊甸園)已使用的佔當前容量百分比 |
O |
old代已使用的佔當前容量百分比 |
P |
perm代已使用的佔當前容量百分比 |
YGC |
從應用程序啓動到採樣時年輕代中gc次數 |
YGCT |
從應用程序啓動到採樣時年輕代中gc所用時間(s) |
FGC |
從應用程序啓動到採樣時old代(全gc)gc次數 |
FGCT |
從應用程序啓動到採樣時old代(全gc)gc所用時間(s) |
GCT |
從應用程序啓動到採樣時gc用的總時間(s) |
2.6、jstat -gcnew <pid>:年輕代對象信息
顯示列名 |
具體描述 |
S0C |
年輕代中第一個survivor(倖存區)的容量 (KB) |
S1C |
年輕代中第二個survivor(倖存區)的容量 (KB) |
S0U |
年輕代中第一個survivor(倖存區)目前已使用空間 (KB) |
S1U |
年輕代中第二個survivor(倖存區)目前已使用空間 (KB) |
TT |
持有次數限制 |
MTT |
最大持有次數限制 |
EC |
年輕代中Eden(伊甸園)的容量 (KB) |
EU |
年輕代中Eden(伊甸園)目前已使用空間 (KB) |
YGC |
從應用程序啓動到採樣時年輕代中gc次數 |
YGCT |
從應用程序啓動到採樣時年輕代中gc所用時間(s) |
2.7、jstat -gcnewcapacity <pid> : 年輕代對象的信息以及佔用量
顯示列名 |
具體描述 |
NGCMN |
年輕代(young)中初始化(最小)的大小(KB) |
NGCMX |
年輕代(young)的最大容量 (KB) |
NGC |
年輕代(young)中當前的容量 (KB) |
S0CMX |
年輕代中第一個survivor(倖存區)的最大容量 (KB) |
S0C |
年輕代中第一個survivor(倖存區)的容量 (KB) |
S1CMX |
年輕代中第二個survivor(倖存區)的最大容量 (KB) |
S1C |
年輕代中第二個survivor(倖存區)的容量 (KB) |
ECMX |
年輕代中Eden(伊甸園)的最大容量 (KB) |
EC |
年輕代中Eden(伊甸園)的容量 (KB) |
YGC |
從應用程序啓動到採樣時年輕代中gc次數 |
FGC |
從應用程序啓動到採樣時old代(全gc)gc次數 |
2.8、jstat -gcold <pid>:old 代對象的信息
顯示列名 |
具體描述 |
PC |
Perm(持久代)的容量 (KB) |
PU |
Perm(持久代)目前已使用空間 (KB) |
OC |
Old代的容量 (KB) |
OU |
Old代目前已使用空間 (KB) |
YGC |
從應用程序啓動到採樣時年輕代中gc次數 |
FGC |
從應用程序啓動到採樣時old代(全gc)gc次數 |
FGCT |
從應用程序啓動到採樣時old代(全gc)gc所用時間(s) |
GCT |
從應用程序啓動到採樣時gc用的總時間(s) |
2.9、jstat -gcoldcapacity <pid> :old 代對象的信息以及佔用量
顯示列名 |
具體描述 |
OGCMN |
old代中初始化(最小)的大小 (KB) |
OGCMX |
old代的最大容量(KB) |
OGC |
old代當前新生成的容量 (KB) |
OC |
Old代的容量 (KB) |
YGC |
從應用程序啓動到採樣時年輕代中gc次數 |
FGC |
從應用程序啓動到採樣時old代(全gc)gc次數 |
FGCT |
從應用程序啓動到採樣時old代(全gc)gc所用時間(s) |
GCT |
從應用程序啓動到採樣時gc用的總時間(s) |
2.10、jstat -gcpermcapacity <pid> :perm對象的信息以及佔用量。
顯示列名 |
具體描述 |
PGCMN |
perm代中初始化(最小)的大小 (KB) |
PGCMX |
perm代的最大容量 (KB) |
PGC |
perm代當前新生成的容量 (KB) |
PC |
Perm(持久代)的容量 (KB) |
YGC |
從應用程序啓動到採樣時年輕代中gc次數 |
FGC |
從應用程序啓動到採樣時old代(全gc)gc次數 |
FGCT |
從應用程序啓動到採樣時old代(全gc)gc所用時間(s) |
GCT |
從應用程序啓動到採樣時gc用的總時間(s) |
2.11、jstat -printcompilation <pid> :當前VM執行的信息
顯示列名 |
具體描述 |
Compiled |
編譯任務的數目 |
Size |
方法生成的字節碼的大小 |
Type |
編譯類型 |
Method |
類名和方法名用來標識編譯的方法。類名使用/做爲一個命名空間分隔符。方法名是給定類中的方法。上述格式是由-XX:+PrintComplation選項進行設置的 |
3、jconsole
jconsole是一個圖形界面的監控工具,可以通過vnc工具組合起來進行遠程監控。