http://guafei.iteye.com/blog/1815222 (jstack(檢視線程)、jmap(檢視記憶體)和jstat(性能分析)指令)
1、jps 指令:
jps [ options ] [ hostid ]
options選項
-q 僅輸出VM辨別符,不包括class name,jar name,arguments in main method
-m 輸出main method的參數
-l 輸出完全的包名,應用主類名,jar的完全路徑名
-v 輸出jvm參數
-V 輸出通過flag檔案傳遞到JVM中的參數(.hotspotrc檔案或-XX:Flags=所指定的檔案
-J 用于傳遞jvm選項到由javac調用的java加載器中,例如,“-J-Xms48m”将把啟動記憶體設定為48M,使用-J選項可以非常友善的向基于Java的開發的底層虛拟機應用程式傳遞參數。
hostid 指定了目标的伺服器,它的文法如下:
[protocol:][[//]hostname][:port][/servername]
protocol - 如果protocol及hostname都沒有指定,那表示的是與目前環境相關的本地協定,如果指定了hostname卻沒有指定protocol,那麼protocol的預設就是rmi。
hostname - 伺服器的IP或者名稱,沒有指定則表示本機。
port - 遠端rmi的端口,如果沒有指定則預設為1099。
Servername - 注冊到RMI注冊中心中的jstatd的名稱。
示例
不帶任何參數
[[email protected] /]# jps
23501 Bootstrap
23709 Jps
帶-v參數
[[email protected] /]# jps -v
23501 Bootstrap -Djava.util.logging.config.file=/opt/apache-tomcat-7.0.67/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Xms1024m -Xmx1024m -Xss1m -XX:NewSize=256m -XX:MaxNewSize=512m -XX:PermSize=256M -XX:MaxPermSize=512m -XX:+DisableExplicitGC -Xms1024m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=512m -XX:PermSize=256m -XX:MaxPermSize=512m -Djava.endorsed.dirs=/opt/apache-tomcat-7.0.67/endorsed -Dcatalina.base=/opt/apache-tomcat-7.0.67 -Dcatalina.home=/opt/apache-tomcat-7.0.67 -Djava.io.tmpdir=/opt/apache-tomcat-7.0.67/temp
23729 Jps -Denv.class.path=.:/usr/java/jdk1.7.0_75/lib:/usr/java/jdk1.7.0_75/jre/lib: -Dapplication.home=/usr/java/jdk1.7.0_75 -Xms8m
帶-l參數
[[email protected] /]# jps -l
23501 org.apache.catalina.startup.Bootstrap
23751 sun.tools.jps.Jps
2、jstat指令 (jstack(檢視線程)、jmap(檢視記憶體)和jstat(性能分析)指令 參考)
Jstat是JDK自帶的一個輕量級小工具。全稱“Java Virtual Machine statistics monitoring tool”,它位于java的bin目錄下,主要利用JVM内建的指令對Java應用程式的資源和性能進行實時的指令行的監控,包括了對Heap size和垃圾回收狀況的監控。可見,Jstat是輕量級的、專門針對JVM的工具,非常适用。
jstat工具特别強大,有衆多的可選項,詳細檢視堆内各個部分的使用量,以及加載類的數量。使用時,需加上檢視程序的程序id(使用jps檢視),和所選參數。參考格式如下:
jstat [ option vmid [ interval[s|ms] [count] ] ]
參數interval和count代表查詢間隔和查詢次數,可以列出目前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編譯統計)
比如:jstat -gc java程序号
[[email protected] /]# jstat -gc 23915
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
65536.0 65536.0 0.0 50941.4 393216.0 354346.7 524288.0 17374.8 262144.0 51252.2 3 0.160 0 0.000 0.160
3、jinfo 指令
jinfo主要用來檢視應用的配置參數,及列印JVM所指定的JVM參數;還可以使用 -sysprops 選項講虛拟機程序中所指定的System.getProperties()内容列印出來;并可以檢視到JVM參數的系統預設值,這個在jps -v是無法看到的;同時jinfo 還能在運作期修改JVM參數, 通過-flag name=value 或者 -flag [+|-]name 來修改一部分運作期可修改的JVM參數。
如果程序運作在64位虛拟機上,需要指明-J-d64參數,如:jinfo -J-d64 -sysprops pid另外,Java7的官方文檔指出,這一指令在後續的版本中可能不再使用。筆者使用的版本(jdk8)中已經不支援該指令