JVM分析工具JPS JINFO JSTACK JSTAT JMAP

經過這幾個命令再結合經常使用的文本處理工具(sed、awk)能夠快速查看到本身須要的數據。詳細分解以下:java

JPS命令

       jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一個顯示當前全部java進程pid的命令,簡單實用,很是適合在linux/unix平臺上簡單察看當前java進程的一些簡單狀況。
       ps命令咱們常常用到,這個命令主要是用來顯示當前系統的進程狀況。好比有哪些進程及其 id。jps命令也是同樣,它的做用是顯示當前系統的java進程狀況及其id號。咱們能夠經過它來查看咱們到底啓動了幾個java進程(由於每個java程序都會獨佔一個java虛擬機實例)以及他們的進程號(爲下面幾個程序作準備),並可經過opt來查看這些進程的詳細啓動參數。linux

用來查看全部的jvm進程,包括進程ID,進程啓動的路徑等。博主平時都是用ps過濾的。c++

用法:

jps [-q] [-mlvV] [<hostid>]

經常使用選項:

-q    安靜,只顯示pid,不顯示class名稱,jar文件名和傳遞給main 方法的參數
-m   輸出傳遞給main 方法的參數,在嵌入式jvm上多是null
-l (顯示完整路徑)
-v (顯示傳遞給JVM的命令行參數)
-V (顯示經過flag文件傳遞給JVM的參數)
hostid是主機id,默認localhost

例子:

[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jps 
4214 Bootstrap 
18096 jar 
26423 Jps 
[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jps -q 
4214 
18096 
26438 
[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jps -m 
4214 Bootstrap start 
18096 jar 
26453 Jps -m 
[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jps -l 
4214 org.apache.catalina.startup.Bootstrap 
18096 logmon.jar 
26468 sun.tools.jps.Jps 
[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jps -v 
4214 Bootstrap -Djava.util.logging.config.file=/usr/local/apache-tomcat-7.0.53/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms2560m -Xmx2560m -Xmn680m -Xss256k -XX:PermSize=240m -XX:MaxPermSize=240m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection -XX:+CMSClassUnloadingEnabled -XX:+DisableExplicitGC -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Djava.endorsed.dirs=/usr/local/apache-tomcat-7.0.53/endorsed -Dcatalina.base=/usr/local/apache-tomcat-7.0.53 -Dcatalina.home=/usr/local/apache-tomcat-7.0.53 -Djava.io.tmpdir=/usr/local/apache-tomcat-7.0.53/temp 
18096 jar -Xms64m -Xmx64m -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 
26483 Jps -Denv.class.path=.:/usr/local/jdk/lib/dt.jar:/usr/local/jdk/lib/tools.jar -Dapplication.home=/usr/local/jdk1.7.0_55 -Xms8m 
[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jps -V 
4214 Bootstrap 
26512 Jps 
18096 jar

JINFO命令

 jinfo命令用來輸出給定 java 進程的全部配置信息,包括 java 系統屬性和 jvm 命令行標記等web

負責觀察進程運行環境參數,包括Java System屬性和JVM命令行參數。當系統崩潰時,jinfo能夠從core文件裏面知道崩潰的Java應用程序的配置信息算法

用法:

jinfo [ option ] pid
jinfo [ option ] executable core
jinfo [ option ] [server-id@]remote-hostname-or-IP

經常使用選項:

-flags         打印命令行參數
-sysprops      打印系統屬性

經常使用參數:

pid   進程號
executable    產生 core dump 的 java executable
core   core file
remote-hostname-or-IP   主機名或ip
server-id   遠程主機上的debug server的惟一id

例子:

[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jinfo 4214          # 這個命令包含了 JDK 和 JVM 運行起來時的一些屬性
Attaching to process ID 4214, please wait... 
Debugger attached successfully. 
Server compiler detected. 
JVM version is 24.55-b03 
Java System Properties: 
 
java.runtime.name = Java(TM) SE Runtime Environment 
java.vm.version = 24.55-b03 
sun.boot.library.path = /usr/local/jdk1.7.0_55/jre/lib/amd64 
shared.loader = 
java.vendor.url = http://java.oracle.com/ 
java.vm.vendor = Oracle Corporation 
path.separator = : 
file.encoding.pkg = sun.io 
java.vm.name = Java HotSpot(TM) 64-Bit Server VM 
java.util.logging.config.file = /usr/local/apache-tomcat-7.0.53/conf/logging.properties 
tomcat.util.buf.StringCache.byte.enabled = true 
sun.os.patch.level = unknown 
sun.java.launcher = SUN_STANDARD 
user.country = US 
user.dir = /home/apps/repair-web 
java.vm.specification.name = Java Virtual Machine Specification 
java.runtime.version = 1.7.0_55-b13 
org.apache.catalina.startup.TldConfig.jarsToSkip = tomcat7-websocket.jar 
java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment 
os.arch = amd64 
java.endorsed.dirs = /usr/local/apache-tomcat-7.0.53/endorsed 
line.separator = 
 
java.io.tmpdir = /usr/local/apache-tomcat-7.0.53/temp 
java.vm.specification.vendor = Oracle Corporation 
java.util.logging.manager = org.apache.juli.ClassLoaderLogManager 
java.naming.factory.url.pkgs = org.apache.naming 
os.name = Linux 
sun.jnu.encoding = UTF-8 
java.library.path = /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib 
tomcat.util.scan.DefaultJarScanner.jarsToSkip = bootstrap.jar,commons-daemon.jar,tomcat-juli.jar,annotations-api.jar,el-api.jar,jsp-api.jar,servlet-api.jar,websocket-api.jar,catalina.jar,catalina-ant.jar,catalina-ha.jar,catalina-tribes.jar,jasper.jar,jasper-el.jar,ecj-*.jar,tomcat-api.jar,tomcat-util.jar,tomcat-coyote.jar,tomcat-dbcp.jar,tomcat-jni.jar,tomcat-spdy.jar,tomcat-i18n-en.jar,tomcat-i18n-es.jar,tomcat-i18n-fr.jar,tomcat-i18n-ja.jar,tomcat-juli-adapters.jar,catalina-jmx-remote.jar,catalina-ws.jar,tomcat-jdbc.jar,tools.jar,commons-beanutils*.jar,commons-codec*.jar,commons-collections*.jar,commons-dbcp*.jar,commons-digester*.jar,commons-fileupload*.jar,commons-httpclient*.jar,commons-io*.jar,commons-lang*.jar,commons-logging*.jar,commons-math*.jar,commons-pool*.jar,jstl.jar,geronimo-spec-jaxrpc*.jar,wsdl4j*.jar,ant.jar,ant-junit*.jar,aspectj*.jar,jmx.jar,h2*.jar,hibernate*.jar,httpclient*.jar,jmx-tools.jar,jta*.jar,log4j.jar,log4j-1*.jar,mail*.jar,slf4j*.jar,xercesImpl.jar,xmlParserAPIs.jar,xml-apis.jar,junit.jar,junit-*.jar,hamcrest*.jar,org.hamcrest*.jar,ant-launcher.jar,cobertura-*.jar,asm-*.jar,dom4j-*.jar,icu4j-*.jar,jaxen-*.jar,jdom-*.jar,jetty-*.jar,oro-*.jar,servlet-api-*.jar,tagsoup-*.jar,xmlParserAPIs-*.jar,xom-*.jar 
java.class.version = 51.0 
java.specification.name = Java Platform API Specification 
sun.management.compiler = HotSpot 64-Bit Tiered Compilers 
os.version = 2.6.32-431.el6.x86_64 
user.home = / 
org.apache.catalina.startup.ContextConfig.jarsToSkip = 
user.timezone = Asia/Shanghai 
catalina.useNaming = true 
java.awt.printerjob = sun.print.PSPrinterJob 
file.encoding = UTF-8 
java.specification.version = 1.7 
catalina.home = /usr/local/apache-tomcat-7.0.53 
user.name = nobody 
java.class.path = /usr/local/apache-tomcat-7.0.53/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.53/bin/tomcat-juli.jar 
java.naming.factory.initial = org.apache.naming.java.javaURLContextFactory 
package.definition = sun.,java.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper. 
java.vm.specification.version = 1.7 
sun.arch.data.model = 64 
sun.java.command = org.apache.catalina.startup.Bootstrap start 
java.home = /usr/local/jdk1.7.0_55/jre 
user.language = en 
java.specification.vendor = Oracle Corporation 
awt.toolkit = sun.awt.X11.XToolkit 
java.vm.info = mixed mode 
java.version = 1.7.0_55 
java.ext.dirs = /usr/local/jdk1.7.0_55/jre/lib/ext:/usr/java/packages/lib/ext 
sun.boot.class.path = /usr/local/jdk1.7.0_55/jre/lib/resources.jar:/usr/local/jdk1.7.0_55/jre/lib/rt.jar:/usr/local/jdk1.7.0_55/jre/lib/sunrsasign.jar:/usr/local/jdk1.7.0_55/jre/lib/jsse.jar:/usr/local/jdk1.7.0_55/jre/lib/jce.jar:/usr/local/jdk1.7.0_55/jre/lib/charsets.jar:/usr/local/jdk1.7.0_55/jre/lib/jfr.jar:/usr/local/jdk1.7.0_55/jre/classes 
server.loader = 
java.vendor = Oracle Corporation 
catalina.base = /usr/local/apache-tomcat-7.0.53 
file.separator = / 
java.vendor.url.bug = http://bugreport.sun.com/bugreport/ 
common.loader = ${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar 
sun.io.unicode.encoding = UnicodeLittle 
sun.font.fontmanager = sun.awt.X11FontManager 
sun.cpu.endian = little 
package.access = sun.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper. 
sun.cpu.isalist = 
 
VM Flags: 
 
-Djava.util.logging.config.file=/usr/local/apache-tomcat-7.0.53/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms2560m -Xmx2560m -Xmn680m -Xss256k -XX:PermSize=240m -XX:MaxPermSize=240m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection -XX:+CMSClassUnloadingEnabled -XX:+DisableExplicitGC -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Djava.endorsed.dirs=/usr/local/apache-tomcat-7.0.53/endorsed -Dcatalina.base=/usr/local/apache-tomcat-7.0.53 -Dcatalina.home=/usr/local/apache-tomcat-7.0.53 -Djava.io.tmpdir=/usr/local/apache-tomcat-7.0.53/temp 
[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jinfo -sysprops 4214    # 包含 JDK 運行起來時的一些屬性
Attaching to process ID 4214, please wait... 
Debugger attached successfully. 
Server compiler detected. 
JVM version is 24.55-b03 
java.runtime.name = Java(TM) SE Runtime Environment 
java.vm.version = 24.55-b03 
sun.boot.library.path = /usr/local/jdk1.7.0_55/jre/lib/amd64 
shared.loader = 
java.vendor.url = http://java.oracle.com/ 
java.vm.vendor = Oracle Corporation 
path.separator = : 
file.encoding.pkg = sun.io 
java.vm.name = Java HotSpot(TM) 64-Bit Server VM 
java.util.logging.config.file = /usr/local/apache-tomcat-7.0.53/conf/logging.properties 
tomcat.util.buf.StringCache.byte.enabled = true 
sun.os.patch.level = unknown 
sun.java.launcher = SUN_STANDARD 
user.country = US 
user.dir = /home/apps/repair-web 
java.vm.specification.name = Java Virtual Machine Specification 
java.runtime.version = 1.7.0_55-b13 
org.apache.catalina.startup.TldConfig.jarsToSkip = tomcat7-websocket.jar 
java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment 
os.arch = amd64 
java.endorsed.dirs = /usr/local/apache-tomcat-7.0.53/endorsed 
line.separator = 
 
java.io.tmpdir = /usr/local/apache-tomcat-7.0.53/temp 
java.vm.specification.vendor = Oracle Corporation 
java.util.logging.manager = org.apache.juli.ClassLoaderLogManager 
java.naming.factory.url.pkgs = org.apache.naming 
os.name = Linux 
sun.jnu.encoding = UTF-8 
java.library.path = /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib 
tomcat.util.scan.DefaultJarScanner.jarsToSkip = bootstrap.jar,commons-daemon.jar,tomcat-juli.jar,annotations-api.jar,el-api.jar,jsp-api.jar,servlet-api.jar,websocket-api.jar,catalina.jar,catalina-ant.jar,catalina-ha.jar,catalina-tribes.jar,jasper.jar,jasper-el.jar,ecj-*.jar,tomcat-api.jar,tomcat-util.jar,tomcat-coyote.jar,tomcat-dbcp.jar,tomcat-jni.jar,tomcat-spdy.jar,tomcat-i18n-en.jar,tomcat-i18n-es.jar,tomcat-i18n-fr.jar,tomcat-i18n-ja.jar,tomcat-juli-adapters.jar,catalina-jmx-remote.jar,catalina-ws.jar,tomcat-jdbc.jar,tools.jar,commons-beanutils*.jar,commons-codec*.jar,commons-collections*.jar,commons-dbcp*.jar,commons-digester*.jar,commons-fileupload*.jar,commons-httpclient*.jar,commons-io*.jar,commons-lang*.jar,commons-logging*.jar,commons-math*.jar,commons-pool*.jar,jstl.jar,geronimo-spec-jaxrpc*.jar,wsdl4j*.jar,ant.jar,ant-junit*.jar,aspectj*.jar,jmx.jar,h2*.jar,hibernate*.jar,httpclient*.jar,jmx-tools.jar,jta*.jar,log4j.jar,log4j-1*.jar,mail*.jar,slf4j*.jar,xercesImpl.jar,xmlParserAPIs.jar,xml-apis.jar,junit.jar,junit-*.jar,hamcrest*.jar,org.hamcrest*.jar,ant-launcher.jar,cobertura-*.jar,asm-*.jar,dom4j-*.jar,icu4j-*.jar,jaxen-*.jar,jdom-*.jar,jetty-*.jar,oro-*.jar,servlet-api-*.jar,tagsoup-*.jar,xmlParserAPIs-*.jar,xom-*.jar 
java.class.version = 51.0 
java.specification.name = Java Platform API Specification 
sun.management.compiler = HotSpot 64-Bit Tiered Compilers 
os.version = 2.6.32-431.el6.x86_64 
user.home = / 
org.apache.catalina.startup.ContextConfig.jarsToSkip = 
user.timezone = Asia/Shanghai 
catalina.useNaming = true 
java.awt.printerjob = sun.print.PSPrinterJob 
file.encoding = UTF-8 
java.specification.version = 1.7 
catalina.home = /usr/local/apache-tomcat-7.0.53 
user.name = nobody 
java.class.path = /usr/local/apache-tomcat-7.0.53/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.53/bin/tomcat-juli.jar 
java.naming.factory.initial = org.apache.naming.java.javaURLContextFactory 
package.definition = sun.,java.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper. 
java.vm.specification.version = 1.7 
sun.arch.data.model = 64 
sun.java.command = org.apache.catalina.startup.Bootstrap start 
java.home = /usr/local/jdk1.7.0_55/jre 
user.language = en 
java.specification.vendor = Oracle Corporation 
awt.toolkit = sun.awt.X11.XToolkit 
java.vm.info = mixed mode 
java.version = 1.7.0_55 
java.ext.dirs = /usr/local/jdk1.7.0_55/jre/lib/ext:/usr/java/packages/lib/ext 
sun.boot.class.path = /usr/local/jdk1.7.0_55/jre/lib/resources.jar:/usr/local/jdk1.7.0_55/jre/lib/rt.jar:/usr/local/jdk1.7.0_55/jre/lib/sunrsasign.jar:/usr/local/jdk1.7.0_55/jre/lib/jsse.jar:/usr/local/jdk1.7.0_55/jre/lib/jce.jar:/usr/local/jdk1.7.0_55/jre/lib/charsets.jar:/usr/local/jdk1.7.0_55/jre/lib/jfr.jar:/usr/local/jdk1.7.0_55/jre/classes 
server.loader = 
java.vendor = Oracle Corporation 
catalina.base = /usr/local/apache-tomcat-7.0.53 
file.separator = / 
java.vendor.url.bug = http://bugreport.sun.com/bugreport/ 
common.loader = ${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar 
sun.io.unicode.encoding = UnicodeLittle 
sun.font.fontmanager = sun.awt.X11FontManager 
sun.cpu.endian = little 
package.access = sun.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper. 
sun.cpu.isalist = 
[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jinfo -flags 4214        # 包含 JVM 運行起來時的一些屬性
Attaching to process ID 4214, please wait... 
Debugger attached successfully. 
Server compiler detected. 
JVM version is 24.55-b03 
 
-Djava.util.logging.config.file=/usr/local/apache-tomcat-7.0.53/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms2560m -Xmx2560m -Xmn680m -Xss256k -XX:PermSize=240m -XX:MaxPermSize=240m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection -XX:+CMSClassUnloadingEnabled -XX:+DisableExplicitGC -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Djava.endorsed.dirs=/usr/local/apache-tomcat-7.0.53/endorsed -Dcatalina.base=/usr/local/apache-tomcat-7.0.53 -Dcatalina.home=/usr/local/apache-tomcat-7.0.53 -Djava.io.tmpdir=/usr/local/apache-tomcat-7.0.53/temp

 

JSTACK命令

該命令打印java線程的堆棧跟蹤,能夠得知哪些線程被阻塞或正等待,以便於查找如線程死鎖的緣由apache

用來觀察 jvm 中當前全部線程的運行狀況和線程當前狀態。
    當系統崩潰時,若是java程序崩潰生成core文件,jstack工具能夠用來得到core文件的java stack和native stack的信息,從而能夠輕鬆地知道java程序是如何崩潰和在程序何處發生問題。
    當系統hung住時,jstack工具能夠附屬到正在運行的java程序中,看到當時運行的java程序的java stack和native stack的信息, 若是如今運行的java程序呈現hung的狀態,jstack是很是有用的。bootstrap

用法:

jstack [ option ] pid
jstack [ option ] executable core
jstack [ option ] [server-id@]remote-hostname-or-IP

經常使用選項:

-F      當’jstack [-l] pid’沒有相應的時候強制打印棧信息
-l      長列表. 打印關於鎖的附加信息,例如屬於java.util.concurrent的ownable synchronizers列表.
-m     打印java和native c/c++框架的全部棧信息.

經常使用參數:

core 將被打印信息的core dump文件
remote-hostname-or-IP 遠程debug服務的主機名或ip
server-id 惟一id,假如一臺主機上多個遠程debug服務
pid    須要被打印配置信息的java進程id,能夠用jps查詢

例子:

[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jstack -F 18096 
Attaching to process ID 18096, please wait... 
Debugger attached successfully. 
Server compiler detected. 
JVM version is 24.55-b03 
Deadlock Detection: 
 
No deadlocks found. 
 
Thread 18105: (state = BLOCKED) 
 
 
Thread 18104: (state = BLOCKED) 
- java.lang.Object.wait(long) @bci=0 (Interpreted frame) 
- java.lang.ref.ReferenceQueue.remove(long) @bci=44, line=135 (Interpreted frame) 
- java.lang.ref.ReferenceQueue.remove() @bci=2, line=151 (Interpreted frame) 
- java.lang.ref.Finalizer$FinalizerThread.run() @bci=16, line=189 (Interpreted frame) 
 
 
Thread 18103: (state = BLOCKED) 
- java.lang.Object.wait(long) @bci=0 (Interpreted frame) 
- java.lang.Object.wait() @bci=2, line=503 (Interpreted frame) 
- java.lang.ref.Reference$ReferenceHandler.run() @bci=46, line=133 (Interpreted frame) 
 
 
Thread 18097: (state = BLOCKED) 
- java.lang.Thread.sleep(long) @bci=0 (Interpreted frame) 
- logmon.logmon.main(java.lang.String[]) @bci=262, line=200 (Interpreted frame)
 
[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jstack -F -l 18096 
Attaching to process ID 18096, please wait... 
Debugger attached successfully. 
Server compiler detected. 
JVM version is 24.55-b03 
Deadlock Detection: 
 
No deadlocks found. 
 
Thread 18105: (state = BLOCKED) 
 
Locked ownable synchronizers: 
- None 
 
Thread 18104: (state = BLOCKED) 
- java.lang.Object.wait(long) @bci=0 (Interpreted frame) 
- java.lang.ref.ReferenceQueue.remove(long) @bci=44, line=135 (Interpreted frame) 
- java.lang.ref.ReferenceQueue.remove() @bci=2, line=151 (Interpreted frame) 
- java.lang.ref.Finalizer$FinalizerThread.run() @bci=16, line=189 (Interpreted frame) 
 
Locked ownable synchronizers: 
- None 
 
Thread 18103: (state = BLOCKED) 
- java.lang.Object.wait(long) @bci=0 (Interpreted frame) 
- java.lang.Object.wait() @bci=2, line=503 (Interpreted frame) 
- java.lang.ref.Reference$ReferenceHandler.run() @bci=46, line=133 (Interpreted frame) 
 
Locked ownable synchronizers: 
- None 
 
Thread 18097: (state = BLOCKED) 
- java.lang.Thread.sleep(long) @bci=0 (Interpreted frame) 
- logmon.logmon.main(java.lang.String[]) @bci=262, line=200 (Interpreted frame) 
 
Locked ownable synchronizers: 
- None 
[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jstack -m 18096 
Attaching to process ID 18096, please wait... 
Debugger attached successfully. 
Server compiler detected. 
JVM version is 24.55-b03 
Deadlock Detection: 
 
No deadlocks found. 
 
----------------- 18097 ----------------- 
0x00000034aa60b98e __pthread_cond_timedwait + 0x13e 
0x00007ffe57d44174 _ZN2os5sleepEP6Threadlb + 0x254 
0x00007ffe57bac662 JVM_Sleep + 0x342 
0x00007ffe4d012738 * java.lang.Thread.sleep(long) bci:0 (Interpreted frame) 
0x00007ffe4d006058 * logmon.logmon.main(java.lang.String[]) bci:262 line:200 (Interpreted frame) 
0x00007ffe4d0004e7 <StubRoutines> 
0x00007ffe57b274b5 _ZN9JavaCalls11call_helperEP9JavaValueP12methodHandleP17JavaCallArgumentsP6Thread + 0x365 
0x00007ffe57b25f18 _ZN9JavaCalls4callEP9JavaValue12methodHandleP17JavaCallArgumentsP6Thread + 0x28 
0x00007ffe57b5f109 _ZL17jni_invoke_staticP7JNIEnv_P9JavaValueP8_jobject11JNICallTypeP10_jmethodIDP18JNI_ArgumentPusherP6Thread + 0x219 
0x00007ffe57b68192 jni_CallStaticVoidMethod + 0x162 
0x00007ffe5839b6d9 JavaMain + 0x7e9 
----------------- 18098 ----------------- 
0x00000034aa60b5bc __pthread_cond_wait + 0xcc 
0x00007ffe57d05b2f _ZN7Monitor5IWaitEP6Threadl + 0xef 
0x00007ffe57d062be _ZN7Monitor4waitEblb + 0x22e 
0x00007ffe57a7e953 _ZN13GCTaskManager8get_taskEj + 0x43 
0x00007ffe57a80018 _ZN12GCTaskThread3runEv + 0x188 
0x00007ffe57d44668 _ZL10java_startP6Thread + 0x108 
----------------- 18099 ----------------- 
0x00000034aa60b5bc __pthread_cond_wait + 0xcc 
0x00007ffe57d05b2f _ZN7Monitor5IWaitEP6Threadl + 0xef 
0x00007ffe57d062be _ZN7Monitor4waitEblb + 0x22e 
0x00007ffe57a7e953 _ZN13GCTaskManager8get_taskEj + 0x43 
0x00007ffe57a80018 _ZN12GCTaskThread3runEv + 0x188 
0x00007ffe57d44668 _ZL10java_startP6Thread + 0x108 
----------------- 18100 ----------------- 
0x00000034aa60b5bc __pthread_cond_wait + 0xcc 
0x00007ffe57d05b2f _ZN7Monitor5IWaitEP6Threadl + 0xef 
0x00007ffe57d062be _ZN7Monitor4waitEblb + 0x22e 
0x00007ffe57a7e953 _ZN13GCTaskManager8get_taskEj + 0x43 
0x00007ffe57a80018 _ZN12GCTaskThread3runEv + 0x188 
0x00007ffe57d44668 _ZL10java_startP6Thread + 0x108 
----------------- 18101 ----------------- 
0x00000034aa60b5bc __pthread_cond_wait + 0xcc 
0x00007ffe57d05b2f _ZN7Monitor5IWaitEP6Threadl + 0xef 
0x00007ffe57d062be _ZN7Monitor4waitEblb + 0x22e 
0x00007ffe57a7e953 _ZN13GCTaskManager8get_taskEj + 0x43 
0x00007ffe57a80018 _ZN12GCTaskThread3runEv + 0x188 
0x00007ffe57d44668 _ZL10java_startP6Thread + 0x108 
----------------- 18102 ----------------- 
0x00000034aa60b98e __pthread_cond_timedwait + 0x13e 
0x00007ffe57d05dde _ZN7Monitor5IWaitEP6Threadl + 0x39e 
0x00007ffe57d062be _ZN7Monitor4waitEblb + 0x22e 
0x00007ffe57ec9649 _ZN8VMThread4loopEv + 0x339 
0x00007ffe57ec9950 _ZN8VMThread3runEv + 0x70 
0x00007ffe57d44668 _ZL10java_startP6Thread + 0x108 
----------------- 18103 ----------------- 
0x00000034aa60b5bc __pthread_cond_wait + 0xcc 
0x00007ffe57d32a4d _ZN13ObjectMonitor4waitElbP6Thread + 0x9bd 
0x00007ffe57ba4148 JVM_MonitorWait + 0x168 
0x00007ffe4d012738 * java.lang.Object.wait(long) bci:0 (Interpreted frame) 
0x00007ffe4d006058 * java.lang.Object.wait() bci:2 line:503 (Interpreted frame) 
0x00007ffe4d006058 * java.lang.ref.Reference$ReferenceHandler.run() bci:46 line:133 (Interpreted frame) 
0x00007ffe4d0004e7 <StubRoutines> 
0x00007ffe57b274b5 _ZN9JavaCalls11call_helperEP9JavaValueP12methodHandleP17JavaCallArgumentsP6Thread + 0x365 
0x00007ffe57b25f18 _ZN9JavaCalls4callEP9JavaValue12methodHandleP17JavaCallArgumentsP6Thread + 0x28 
0x00007ffe57b261e7 _ZN9JavaCalls12call_virtualEP9JavaValue11KlassHandleP6SymbolS4_P17JavaCallArgumentsP6Thread + 0x197 
0x00007ffe57b26307 _ZN9JavaCalls12call_virtualEP9JavaValue6Handle11KlassHandleP6SymbolS5_P6Thread + 0x47 
0x00007ffe57ba2215 _ZL12thread_entryP10JavaThreadP6Thread + 0xe5 
0x00007ffe57e7c70f _ZN10JavaThread17thread_main_innerEv + 0xdf 
0x00007ffe57e7c815 _ZN10JavaThread3runEv + 0xf5 
0x00007ffe57d44668 _ZL10java_startP6Thread + 0x108 
----------------- 18104 ----------------- 
0x00000034aa60b5bc __pthread_cond_wait + 0xcc 
0x00007ffe57d32a4d _ZN13ObjectMonitor4waitElbP6Thread + 0x9bd 
0x00007ffe57ba4148 JVM_MonitorWait + 0x168 
0x00007ffe4d012738 * java.lang.Object.wait(long) bci:0 (Interpreted frame) 
0x00007ffe4d006058 * java.lang.ref.ReferenceQueue.remove(long) bci:44 line:135 (Interpreted frame) 
0x00007ffe4d006233 * java.lang.ref.ReferenceQueue.remove() bci:2 line:151 (Interpreted frame) 
0x00007ffe4d006233 * java.lang.ref.Finalizer$FinalizerThread.run() bci:16 line:189 (Interpreted frame) 
0x00007ffe4d0004e7 <StubRoutines> 
0x00007ffe57b274b5 _ZN9JavaCalls11call_helperEP9JavaValueP12methodHandleP17JavaCallArgumentsP6Thread + 0x365 
0x00007ffe57b25f18 _ZN9JavaCalls4callEP9JavaValue12methodHandleP17JavaCallArgumentsP6Thread + 0x28 
0x00007ffe57b261e7 _ZN9JavaCalls12call_virtualEP9JavaValue11KlassHandleP6SymbolS4_P17JavaCallArgumentsP6Thread + 0x197 
0x00007ffe57b26307 _ZN9JavaCalls12call_virtualEP9JavaValue6Handle11KlassHandleP6SymbolS5_P6Thread + 0x47 
0x00007ffe57ba2215 _ZL12thread_entryP10JavaThreadP6Thread + 0xe5 
0x00007ffe57e7c70f _ZN10JavaThread17thread_main_innerEv + 0xdf 
0x00007ffe57e7c815 _ZN10JavaThread3runEv + 0xf5 
0x00007ffe57d44668 _ZL10java_startP6Thread + 0x108 
----------------- 18105 ----------------- 
0x00000034aa60d930 sem_wait + 0x30 
0x00007ffe57d3c7a5 _ZL19signal_thread_entryP10JavaThreadP6Thread + 0x95 
0x00007ffe57e7c70f _ZN10JavaThread17thread_main_innerEv + 0xdf 
0x00007ffe57e7c815 _ZN10JavaThread3runEv + 0xf5 
0x00007ffe57d44668 _ZL10java_startP6Thread + 0x108 
----------------- 18106 ----------------- 
0x00000034aa60b5bc __pthread_cond_wait + 0xcc 
0x00007ffe57d05b2f _ZN7Monitor5IWaitEP6Threadl + 0xef 
0x00007ffe57d06336 _ZN7Monitor4waitEblb + 0x2a6 
0x00007ffe579774d8 _ZN12CompileQueue3getEv + 0x128 
0x00007ffe5797b5ca _ZN13CompileBroker20compiler_thread_loopEv + 0x13a 
0x00007ffe57e7c70f _ZN10JavaThread17thread_main_innerEv + 0xdf 
0x00007ffe57e7c815 _ZN10JavaThread3runEv + 0xf5 
0x00007ffe57d44668 _ZL10java_startP6Thread + 0x108 
----------------- 18107 ----------------- 
0x00000034aa60b5bc __pthread_cond_wait + 0xcc 
0x00007ffe57d05b2f _ZN7Monitor5IWaitEP6Threadl + 0xef 
0x00007ffe57d06336 _ZN7Monitor4waitEblb + 0x2a6 
0x00007ffe579774d8 _ZN12CompileQueue3getEv + 0x128 
0x00007ffe5797b5ca _ZN13CompileBroker20compiler_thread_loopEv + 0x13a 
0x00007ffe57e7c70f _ZN10JavaThread17thread_main_innerEv + 0xdf 
0x00007ffe57e7c815 _ZN10JavaThread3runEv + 0xf5 
0x00007ffe57d44668 _ZL10java_startP6Thread + 0x108 
----------------- 18108 ----------------- 
0x00000034aa60b5bc __pthread_cond_wait + 0xcc 
0x00007ffe57d05b2f _ZN7Monitor5IWaitEP6Threadl + 0xef 
0x00007ffe57d062be _ZN7Monitor4waitEblb + 0x22e 
0x00007ffe57dd3998 _ZN13ServiceThread20service_thread_entryEP10JavaThreadP6Thread + 0x198 
0x00007ffe57e7c70f _ZN10JavaThread17thread_main_innerEv + 0xdf 
0x00007ffe57e7c815 _ZN10JavaThread3runEv + 0xf5 
0x00007ffe57d44668 _ZL10java_startP6Thread + 0x108 
----------------- 18109 ----------------- 
0x00000034aa60b98e __pthread_cond_timedwait + 0x13e 
0x00007ffe57d05dde _ZN7Monitor5IWaitEP6Threadl + 0x39e 
0x00007ffe57d062be _ZN7Monitor4waitEblb + 0x22e 
0x00007ffe57e78941 _ZNK13WatcherThread5sleepEv + 0x71 
0x00007ffe57e78c4e _ZN13WatcherThread3runEv + 0x5e 
0x00007ffe57d44668 _ZL10java_startP6Thread + 0x108 
----------------- 18096 ----------------- 
0x00000034aa60822d pthread_join + 0x10d

 

JSTAT命令

用於輸出指定 java 進程的統計信息api

利用JVM內建的指令對Java應用程序的資源和性能進行實時的命令行的監控,包括了對進程的classloader,compiler,gc狀況;能夠用來監視VM內存內的各類堆和非堆的大小及其內存使用量,以及加載類的數量。tomcat

用法:

jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

經常使用選項(附帶每一個選項的輸出列名介紹):

class:統計classloader的行爲
compiler:統計hotspot just-in-time編譯器的行爲
gc:統計gc行爲
gccapacity:統計堆中代的容量、空間
gccause:垃圾收集統計,包括最近引用垃圾收集的事件,基本同gcutil,比gcutil多了兩列
gcnew:統計新生代的行爲
gcnewcapacity:統計新生代的大小和空間
gcold:統計舊生代的行爲
gcoldcapacity:統計舊生代的大小和空間
gcpermcapacity:統計永久代的大小和空間
gcutil:垃圾收集統計
printcompilation:hotspot編譯方法統計
-h n 每n個樣本,顯示header一次
-t n 在第一列顯示時間戳列,時間戳時從jvm啓動開始計算
<vmid>   就是進程號
<interval> interval是監控時間間隔,單位爲微妙,不提供就意味着單次輸出
<count>      count是最大輸出次數,不提供且監控時間間隔有值的話, 就無限打印

例子:

class選項:

[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jstat -class 4214 2000 10      (每隔2秒監控一次,一共作10次) 
Loaded Bytes Unloaded Bytes  Time 
9197   18418.   0 0    0.0  12.49 
9197   18418.   0 0    0.0  12.49

列名介紹:bash

Column Description
Loaded 被讀入類的數量
Bytes 被讀入的字節數(K)
Unloaded 被卸載類的數量
Bytes 被卸載的字節數(K)
Time 花費在load和unload類的時間

 

compiler選項

[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jstat -compiler 4214 
Compiled Failed Invalid Time FailedType FailedMethod 
3080        0      0    101.41    0

列名介紹:

Column

Description
Compiled 被執行的編譯任務的數量
Failed 失敗的編譯任務的數量
Invalid 無效的編譯任務的數量
Time 花費在執行編譯任務的時間
FailedType 最近失敗編譯的編譯類弄
FailedMethod 最近失敗編譯的類名和方法名

 

GC選項:

[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jstat -gc 4214 2000 10 
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT 
69632.0 69632.0 0.0 3902.9 557056.0 10783.2 1925120.0 1479208.6 245760.0 56451.5 51 9.852 9 11.002 20.854 
69632.0 69632.0 0.0 3902.9 557056.0 10783.2 1925120.0 1479208.6 245760.0 56451.5 51 9.852 9 11.002 20.854

列名介紹:

Column Description
S0C 當前S0的容量 (KB)
S1C 當前S1的容量 (KB)
S0U S0的使用 (KB)
S1U S1的使用 (KB)
EC 當前eden的容量(KB)
EU eden的使用 (KB)
OC 當前old的容量(KB)
OU old的使用 (KB)
PC 當前perm的容量 (KB)
PU perm的使用 (KB)
YGC young代gc的次數
YGCT young代gc花費的時間
FGC full gc的次數
FGCT full gc的時間
GCT 垃圾收集收集的總時間

 

gccapacity選項:

[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jstat -gccapacity 4214 
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC 
696320.0 696320.0 696320.0 69632.0 69632.0 557056.0 1925120.0 1925120.0 1925120.0 1925120.0 245760.0 245760.0 245760.0 245760.0 51 9

列名介紹:

Column

Description
NGCMN 年輕代的最小容量 (KB)

NGCMX

年輕代的最大容量 (KB)

NGC

當前年輕代的容量 (KB)

S0C

當前S0的空間 (KB)

S1C

當前S1的空間 (KB)

EC

當前eden的空間 (KB)

OGCMN

年老代的最小容量 (KB)

OGCMX

年老代的最大容量 (KB)

OGC

當前年老代的容量 (KB)

OC

當前年老代的空間 (KB)

PGCMN

永久代的最小容量 (KB)

PGCMX

永久代的最大容量 (KB)

PGC

當前永久代的容量 (KB)

PC

當前永久代的空間 (KB)

YGC

年輕代gc的次數

FGC full gc的次數

 

gccause參數:

[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jstat -gccause 4214 
S0 S1 E O P YGC YGCT FGC FGCT GCT LGCC GCC 
0.00 5.60 16.72 76.84 22.97 51 9.852 9 11.002 20.854 Allocation Failure No GC

列名介紹:

Column

Description

LGCC

最近垃圾回收的緣由

GCC 當前垃圾回收的緣由

 

gcnew選項:

[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jstat -gcnew 4214 
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT 
69632.0 69632.0 0.0 3902.9 6 6 34816.0 557056.0 53634.1 51 9.852

列名介紹:

Column

Description

S0C

當前S0空間 (KB)

S1C

當前S1空間 (KB)

S0U

S0空間使用 (KB)

S1U

S1空間使用 (KB)

TT

Tenuring threshold

MTT

最大的tenuring threshold

DSS

但願的Survivor大小 (KB)

EC

當前eden空間 (KB)

EU

eden空間使用 (KB)

YGC

年輕代gc次數

YGCT 年輕代垃圾收集時間

 

gcnewcapacity選項:

[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jstat -gcnewcapacity 4214 
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC 
696320.0 696320.0 696320.0 69632.0 69632.0 69632.0 69632.0 557056.0 557056.0 51 9

參數介紹:

Column

Description
NGCMN 最小的年輕代的容量 (KB)

NGCMX

最大的年輕代的容量 (KB)

NGC

當前年輕代的容量 (KB)

S0CMX

最大的S0空間 (KB)

S0C

當前S0空間 (KB)

S1CMX

最大的S1空間 (KB)

S1C

當前S1空間 (KB)

ECMX

最大eden空間 (KB)

EC

當前eden空間 (KB)

YGC

年輕代gc數量

FGC full gc數量

 

gcold選項:

[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jstat -gcold 4214 
PC PU OC OU YGC FGC FGCT GCT 
245760.0 56451.8 1925120.0 1479208.6 51 9 11.002 20.854

列名介紹:

Column

Description
PC 當前perm空間 (KB)
PU perm空間使用 (KB)
OC 當前old空間 (KB)
OU old空間使用 (KB)
YGC 年輕代gc次數
FGC full gc次數
FGCT full gc時間
GCT 垃圾收集總時間

 

gcoldcapacity選項:

[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jstat -gcoldcapacity 4214 
OGCMN OGCMX OGC OC YGC FGC FGCT GCT 
1925120.0 1925120.0 1925120.0 1925120.0 51 9 11.002 20.854

列名介紹:

Column

Description

OGCMN

最小年老代容量 (KB)
OGCMX 最大年老代容量(KB)
OGC 當前年老代容量 (KB)
OC 當前年老代空間 (KB)
YGC 年輕代gc次數
FGC full gc次數
FGCT full gc時間
GCT 垃圾收集總時間

 

gcpermcapacity選項:

[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jstat -gcpermcapacity 4214 
PGCMN PGCMX PGC PC YGC FGC FGCT GCT 
245760.0 245760.0 245760.0 245760.0 51 9 11.002 20.854

列名介紹:

Column

Description
PGCMN 永久代最小容量 (KB)
PGCMX 永久代最大容量 (KB)
PGC 當前永久代的容量 (KB)
PC 當前永久代的空間 (KB)
YGC 年輕代gc次數
FGC full gc次數
FGCT full gc時間
GCT 垃圾收集總時間

 

gcutil選項:

[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jstat -gcutil 4214 2000 10 
S0 S1 E O P YGC YGCT FGC FGCT GCT 
0.00 5.60 0.82 76.84 22.97 51 9.852 9 11.002 20.854 
0.00 5.60 0.82 76.84 22.97 51 9.852 9 11.002 20.854

列名介紹:

Column

Description

S1 S1使用百分比
E eden使用百分比
O old使用百分比
P perm使用百分比
YGC 年輕代gc次數
YGCT 年輕代gc時間
FGC full gc次數
FGCT full gc時間
GCT 垃圾收集總時間

 

printcompilation選項:

[root@autorepair-web01-rj autorepair-web01-rj.btr /home/apps/repair-web] 
# jstat -printcompilation 4214 
Compiled Size Type Method 
3080 262 1 org/apache/catalina/session/ManagerBase processExpires

列名介紹:

Column

Description
Compiled 被執行的編譯任務的數量
Size 方法字節碼的字節數
Type 編譯類型
Method 編譯方法的類名和方法名。類名使用"/" 代替 "." 做爲空間分隔符. 方法名是給出類的方法名. 格式是一致於HotSpot - XX:+PrintComplation 選項

 

JMAP命令

jmap命令能夠得到運行中的jvm的堆的快照,從而能夠離線分析堆,以檢查內存泄漏,檢查一些嚴重影響性能的大對象的建立,檢查系統中什麼對象最多,各類對象所佔內存的大小等等

用來監視進程運行中的jvm物理內存的佔用狀況,該進程內存內,全部對象的狀況,例如產生了哪些對象,對象數量。當系統崩潰時,jmap 能夠從core文件或進程中得到內存的具體匹配狀況,包括Heap size, Perm size等。

用法:

jmap [option] <pid>
jmap [option] <executable <core>
jmap [option] [server_id@]<remote server IP or hostname>

經常使用選項:

-dump:format=b,file=<filename> pid    # dump堆到文件,format指定輸出格式,live指明是活着的對象,file指定文件名
-finalizerinfo  # 打印等待回收對象的信息
-heap           # 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用狀況,能夠用此來判斷內存目前的使用狀況以及垃圾回收狀況
-histo[:live]   # 打印堆的對象統計,包括對象數、內存大小等等 (由於在dump:live前會進行full gc,所以不加live的堆大小要大於加live堆的大小 )
-permstat       # 打印classload類裝載器和 jvm heap長久層的信息. 包含包括每一個裝載器的名字,活躍,地址,父裝載器,和其總共加載的類大小。另外,內部String的數量和佔用內存數也會打印出來. 
-F              # 強制,強迫.在pid沒有相應的時候使用-dump或者-histo參數. 在這個模式下,live子參數無效.  
-J              # 傳遞參數給jmap啓動的jvm. ,如:-J-Xms256m

例子:

[root@autorepair-web01-rj autorepair-web01-rj.btr /root] 
# jmap -heap 4214 
Attaching to process ID 4214, please wait... 
Debugger attached successfully. 
Server compiler detected. 
JVM version is 24.55-b03 
 
using parallel threads in the new generation. 
using thread-local object allocation. 
Concurrent Mark-Sweep GC 
 
Heap Configuration:                        # 堆配置狀況
MinHeapFreeRatio = 40                      #  最小堆的使用比例
MaxHeapFreeRatio = 70                      # 最大堆的可用比例
MaxHeapSize = 2684354560 (2560.0MB)        # 最大堆空間大小
NewSize = 713031680 (680.0MB)              # 新生代分配大小
MaxNewSize = 713031680 (680.0MB)           # 最大可用新生代分配大小 
OldSize = 5439488 (5.1875MB)               # 老年代大小
NewRatio = 2                               # 新生代比例
SurvivorRatio = 8                          # 新生代與suvivor的比例
PermSize = 251658240 (240.0MB)             # perm區大小
MaxPermSize = 251658240 (240.0MB)          # 最大可分配perm區大小
G1HeapRegionSize = 0 (0.0MB)               # G1堆區大小
 
Heap Usage:                                # 堆使用狀況
New Generation (Eden + 1 Survivor Space):  # 新生代(伊甸區 + survior空間)
capacity = 641728512 (612.0MB)             # 伊甸區容量
used = 507109064 (483.6168899536133MB)     # 已經使用大小
free = 134619448 (128.38311004638672MB)    # 剩餘容量
79.0223676394793% used                     # 使用比例
Eden Space:                                # 伊甸區
capacity = 570425344 (544.0MB)             # 伊甸區容量
used = 503156488 (479.84741973876953MB)    # 伊甸區使用
free = 67268856 (64.15258026123047MB)      # 伊甸區當前剩餘容量
88.2072462755091% used                     # 伊甸區使用狀況
From Space:                                # survior1區
capacity = 71303168 (68.0MB)               # survior1區容量
used = 3952576 (3.76947021484375MB)        # surviror1區已使用狀況
free = 67350592 (64.23052978515625MB)      # surviror1區剩餘容量
5.543338551240809% used                    # survior1區使用比例
To Space:                                  # survior2 區
capacity = 71303168 (68.0MB)               # survior2區容量
used = 0 (0.0MB)                           # survior2區已使用狀況
free = 71303168 (68.0MB)                   # survior2區剩餘容量
0.0% used                                  # survior2區使用比例
concurrent mark-sweep generation:          # 老生代使用狀況
capacity = 1971322880 (1880.0MB)           # 老生代容量
used = 1514740296 (1444.5689163208008MB)   # 老生代已使用容量
free = 456582584 (435.4310836791992MB)     # 老生代剩餘容量
76.83877214472345% used                    # 老生代使用比例
Perm Generation:                           # perm區使用狀況
capacity = 251658240 (240.0MB)             # perm區容量
used = 57814400 (55.1361083984375MB)       # perm區已使用容量
free = 193843840 (184.8638916015625MB)     # perm區剩餘容量
22.973378499348957% used                   # perm區使用比例
 
28645 interned Strings occupying 3168232 bytes.

 

 

附錄一些特殊的小技巧!

 jstat -class 17970 1000 10 (每隔1秒監控一次,一共作10次) 

    Loaded  Bytes  Unloaded  Bytes   Time 
    7837      8534.0   1069      1005.7    27.87

    Loaded:Number of classes loaded.

    Bytes:Number of Kbytes loaded.

    Unloaded:Number of classes unloaded.

    Bytes:Number of Kbytes unloaded.

    Time:Time spent performing class load and unload operations.

 jstat -gc 17970 2000 20 (每隔2秒監控一次,共20次)

    S0C:Current survivor space 0 capacity (KB).

    S1C:Current survivor space 1 capacity (KB).

    S0U:Current survivor space 0 utilization (KB).

    S1U:Current survivor space 1 utilization (KB).

    EC:Current eden space capacity (KB).

    EU:Eden space utilization (KB).

    OC:Current old space capacity (KB).

    OU:Old space utilization (KB).

    PC:Current permanent space capacity (KB).

    PU:Permanent space utilization (KB).

    YGC:Number of young generation GC Events.

    YGCT:Young generation garbage collection time.

    FGC:Number of full GC events.

    FGCT:Full garbage collection time.

    GCT:Total garbage collection time.

 jstat -gcutil 17970 1000 10 (按百分比顯式) 

 jstat -compiler 17970  (顯示VM實時編譯的數量等信息)

 jstat -gccapacity 24931 1000 10

 能夠顯示,VM內存中三代(young,old,perm)對象的使用和佔用大小,如:PGCMN顯示的是最小perm的內存使用量,PGCMX顯示的是perm的內存最大使用量,PGC是當前新生成的perm內存佔用量,PC是但前perm內存佔用量。其餘的能夠根據這個類推, OC是old內純的佔用量。

 jstat -gcnew 25917 new對象的信息及其佔用量

 jstat -gcold 25917 old對象的信息

 jstat -gcoldcapacity 25917   old對象的信息及其佔用量。

 jstat -gcpermcapacity 25917  perm對象的信息及其佔用量

 jstat -printcompilation -h3  25917 1000 5 當前VM執行的信息。每1000毫秒打印一次,一共打印5次,還能夠加上-h3每三行顯示一下標題。

相關文章
相關標籤/搜索