名称 |
主要作用 |
jps |
显示指定系统内所有的HotSpot虚拟机进程(Java程序 进程号) |
jstack |
用于收集HotSpot虚拟机各方面的运行数据 |
jinfo |
显示虚拟机配置信息 |
jmap |
生成虚拟机的内存存储快照 |
jhat |
用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用户在浏览器上查看分析结果 |
jstack |
显示虚拟机的线程快照 |
jps:虚拟机进程状况工具
jps |
列出正在运行的程序的主类函数名和进程号 |
jps -q |
列出正在运行的进程号 |
jps -m |
输出进程启动时传递给主类mian()函数的 参数 |
jps -v |
输出虚拟机进程启动时JVM参数 |
jps -l |
输出主类的全类名,如果进程执行的是jar包,输出jar包路径 |
jstat:虚拟机统计信息系统
-class |
监视装载类,卸载空间,总空间以及类装载所耗费的时间 |
-gc |
监视Java堆状况(Eden区/survivor区/年老代/永久代等的容量,已用空间,GC时间合计) |
-gccapacity |
监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大,最小空间 |
-gcutil |
监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比 |
-gccause |
与-gcutil功能一样,但是会额外输出"导致上一次GC产生的原因" |
-gcnew |
监视新生代GC状况 |
-gcnewcapacity |
监视内容与-gcnew基本相同,输出主要关注使用到的最大,最小空间 |
-gcold |
监视年老代GC状况 |
-gcoldcapacity |
监视内容与-gcold基本相同,输出主要关注使用到的最大,最小空间 |
-gcpermcapacity |
输出永久代使用到的最大,最小空间 |
-compiler |
输出JIT编译器编译过得方法,耗时等信息 |
-printcompilation |
输出已经被JIT编译的方法 |
举个栗子:
jstat -gc 2619 250 30
每250毫秒查询一次,进程2619垃圾收集情况,一共查询20次
如果毫秒数 和 查询次数不输,就代表只查询一次
jstat -gc 2619
S0C |
Survivor0、年轻代中第一个survivor的容量 |
S1C |
Survivor1、年轻代中第二个survivor的容量 |
S0U |
年轻代中第一个survivor目前已使用的空间 |
S1U |
年轻代中第二个survivor目前已使用的空间 |
EC |
年轻代中Eden的容量 |
EU |
年轻代中Eden目前已使用的空间 |
OC |
年老代容量 |
OU |
年老代已经使用的空间 |
MC |
方法区大小 |
MU |
方法区已使用大小 |
CCSC |
压缩类空间大小 |
CCSU |
压缩类空间已使用大小 |
YGC |
年轻代中GC的次数 |
YGCT |
年轻代中GC消耗的时间 |
FGC |
年老代GC的次数 |
FGCT |
年老代GC消耗的时间 |
GCT |
GC消耗总时间 |
jinfo:Java配置信息工具
jinfo的作用是实时的查看和调整虚拟机各项参数。
举个栗子:
jinfo 2564
输出结果:
([email protected])[root@CS22752 ~]# jinfo 2564 Attaching to process ID 2564, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.60-b23 Java System Properties:
java.runtime.name = Java(TM) SE Runtime Environment java.vm.version = 25.60-b23 sun.boot.library.path = /opt/FUDE-1.0/java/jdk1.8.0_60/jre/lib/amd64 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 sun.os.patch.level = unknown sun.java.launcher = SUN_STANDARD user.country = US user.dir = /home/stars/TaskMaster/bin java.vm.specification.name = Java Virtual Machine Specification java.runtime.version = 1.8.0_60-b27 java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment os.arch = amd64 java.endorsed.dirs = /opt/FUDE-1.0/java/jdk1.8.0_60/jre/lib/endorsed java.io.tmpdir = /tmp line.separator =
java.vm.specification.vendor = Oracle Corporation os.name = Linux sun.jnu.encoding = UTF-8 java.library.path = /opt/FUDE-1.0/fude/lib:/opt/FUDE-1.0/utils/lib:/opt/FUDE-1.0/log/lib:/opt/FUDE-1.0/netsnmp/lib:/opt/FUDE-1.0/omni/lib:/opt/FUDE-1.0/python/lib:/opt/FUDE-1.0/boost/lib:/opt/FUDE-1.0/cppunit/lib:/opt/FUDE-1.0/TAO/ACE_wrappers/lib::/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib java.specification.name = Java Platform API Specification java.class.version = 52.0 sun.management.compiler = HotSpot 64-Bit Tiered Compilers os.version = 2.6.32-279.el6.x86_64 user.home = /root user.timezone = Asia/Shanghai java.awt.printerjob = sun.print.PSPrinterJob file.encoding = UTF-8 java.specification.version = 1.8 user.name = root java.class.path = ../lib/dom4j-1.6.1.jar:../lib/jackson-annotations-2.2.3.jar:../lib/postgresql-9.3-1102.jdbc4.jar:../lib/commons-collections-3.2.1.jar:../lib/jackson-core-asl-1.9.13.jar:../lib/licclient.jar:../lib/json-lib-2.2.3-jdk15.jar:../lib/RuleCenterServerAPI-0.9.1.jar:../lib/commons-lang-2.4.jar:../lib/ezmorph-1.0.4.jar:../lib/proxy-server-client-1.1.0.jar:../lib/jackson-jaxrs-1.9.13.jar:../lib/jackson-mapper-asl-1.9.13.jar:../lib/jackson-xc-1.9.13.jar:../lib/RBSPAdapter2.jar:../lib/mongo-2.9.1.jar:../lib/jdom.jar:../lib/jackson-core-2.2.3.jar:../lib/taskcenter.jar:../lib/commons-beanutils-1.8.2.jar:../lib/PCI2.jar:../lib/commons-io-1.4.jar:../lib/ojdbc6.jar:../lib/slf4j-api-1.6.1.jar:../lib/zookeeper-3.4.5.jar:../lib/cxfClient.jar:../lib/commons-logging-1.1.1.jar:../lib/libthrift-0.7.0.jar:../lib/slf4j-log4j12-1.6.6.jar:../lib/whois_client_2.3.0_jre1.6.jar:../lib/log4j-1.2.15.jar:../lib/jackson-databind-2.2.3.jar:../lib/starskeeper-1.1.1.jar:../lib/axis2lib/axiom-dom-1.2.13.jar:../lib/axis2lib/axis2-transport-http-1.6.2.jar:../lib/axis2lib/jibx-bind-1.2.jar:../lib/axis2lib/axis2-ant-plugin-1.6.2.jar:../lib/axis2lib/commons-httpclient-3.1.jar:../lib/axis2lib/httpcore-4.0.jar:../lib/axis2lib/commons-codec-1.3.jar:../lib/axis2lib/regexp-1.2.jar:../lib/axis2lib/commons-fileupload-1.2.jar:../lib/axis2lib/bcel-5.1.jar:../lib/axis2lib/jibx-run-1.2.jar:../lib/axis2lib/geronimo-stax-api_1.0_spec-1.0.1.jar:../lib/axis2lib/axis2-soapmonitor-servlet-1.6.2.jar:../lib/axis2lib/axis2-java2wsdl-1.6.2.jar:../lib/axis2lib/axis2-corba-1.6.2.jar:../lib/axis2lib/geronimo-ws-metadata_2.0_spec-1.1.2.jar:../lib/axis2lib/jalopy-1.5rc3.jar:../lib/axis2lib/jaxb-api-2.1.jar:../lib/axis2lib/xmlbeans-2.3.0.jar:../lib/axis2lib/wstx-asl-3.2.9.jar:../lib/axis2lib/axis2-json-1.6.2.jar:../lib/axis2lib/axiom-impl-1.2.13.jar:../lib/axis2lib/axis2-clustering-1.6.2.jar:../lib/axis2lib/woden-api-1.0M9.jar:../lib/axis2lib/geronimo-saaj_1.3_spec-1.0.1.jar:../lib/axis2lib/geronimo-jta_1.1_spec-1.1.jar:../lib/axis2lib/apache-mime4j-core-0.7.2.jar:../lib/axis2lib/mail-1.4.jar:../lib/axis2lib/mex-1.6.2-impl.jar:../lib/axis2lib/axis2-fastinfoset-1.6.2.jar:../lib/axis2lib/jaxws-tools-2.1.3.jar:../lib/axis2lib/tribes-6.0.16.jar:../lib/axis2lib/axis2-xmlbeans-1.6.2.jar:../lib/axis2lib/geronimo-jaxws_2.2_spec-1.0.jar:../lib/axis2lib/axis2-jaxbri-1.6.2.jar:../lib/axis2lib/axis2-saaj-1.6.2.jar:../lib/axis2lib/antlr-2.7.7.jar:../lib/axis2lib/axis2-jaxws-1.6.2.jar:../lib/axis2lib/axis2-jibx-1.6.2.jar:../lib/axis2lib/neethi-3.0.2.jar:../lib/axis2lib/commons-io-1.4.jar:../lib/axis2lib/axis2-metadata-1.6.2.jar:../lib/axis2lib/xml-resolver-1.2.jar:../lib/axis2lib/XmlSchema-1.4.7.jar:../lib/axis2lib/axiom-api-1.2.13.jar:../lib/axis2lib/activation-1.1.jar:../lib/axis2lib/commons-logging-1.1.1.jar:../lib/axis2lib/woden-impl-dom-1.0M9.jar:../lib/axis2lib/axis2-adb-codegen-1.6.2.jar:../lib/axis2lib/axis2-adb-1.6.2.jar:../lib/axis2lib/xalan-2.7.0.jar:../lib/axis2lib/commons-cli-1.2.jar:../lib/axis2lib/jettison-1.0-RC2.jar:../lib/axis2lib/woden-impl-commons-1.0M9.jar:../lib/axis2lib/jaxb-impl-2.1.7.jar:../lib/axis2lib/axis2-transport-local-1.6.2.jar:../lib/axis2lib/log4j-1.2.15.jar:../lib/axis2lib/axis2-codegen-1.6.2.jar:../lib/axis2lib/axis2-kernel-1.6.2.jar:../lib/axis2lib/jaxb-xjc-2.1.7.jar:../lib/axis2lib/axis2-spring-1.6.2.jar:../lib/axis2lib/wsdl4j-1.6.2.jar:../lib/axis2lib/axis2-mtompolicy-1.6.2.jar:../lib/axis2lib/geronimo-annotation_1.0_spec-1.1.jar:../lib/axis2lib/jaxen-1.1.1.jar:../lib/axis2lib/jsr311-api-1.0.jar:../lib/axis2lib/juli-6.0.16.jar:../lib/redis/messageservice.jar:../lib/redis/jedis-2.6.2.jar:../lib/redis/commons-pool2-2.3.jar:../bin/*:../conf java.vm.specification.version = 1.8 sun.arch.data.model = 64 sun.java.command = com.taskcenter.taskmaster.TaskMaster java.home = /opt/FUDE-1.0/java/jdk1.8.0_60/jre user.language = en java.specification.vendor = Oracle Corporation awt.toolkit = sun.awt.X11.XToolkit java.vm.info = mixed mode java.version = 1.8.0_60 java.ext.dirs = /opt/FUDE-1.0/java/jdk1.8.0_60/jre/lib/ext:/usr/java/packages/lib/ext sun.boot.class.path = /opt/FUDE-1.0/java/jdk1.8.0_60/jre/lib/resources.jar:/opt/FUDE-1.0/java/jdk1.8.0_60/jre/lib/rt.jar:/opt/FUDE-1.0/java/jdk1.8.0_60/jre/lib/sunrsasign.jar:/opt/FUDE-1.0/java/jdk1.8.0_60/jre/lib/jsse.jar:/opt/FUDE-1.0/java/jdk1.8.0_60/jre/lib/jce.jar:/opt/FUDE-1.0/java/jdk1.8.0_60/jre/lib/charsets.jar:/opt/FUDE-1.0/java/jdk1.8.0_60/jre/lib/jfr.jar:/opt/FUDE-1.0/java/jdk1.8.0_60/jre/classes java.vendor = Oracle Corporation file.separator = / java.vendor.url.bug = http://bugreport.sun.com/bugreport/ sun.io.unicode.encoding = UnicodeLittle sun.cpu.endian = little sun.cpu.isalist =
VM Flags: Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=1073741824 -XX:MaxHeapSize=1073741824 -XX:MaxNewSize=357564416 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=357564416 -XX:OldSize=716177408 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC Command line: -Dfile.encoding=UTF-8 -Xms1024m -Xmx1024m |
jmap:Java内存映象工具
-dump |
生成Java堆转存储快照。格式:-dump[:live] format=b,file=filepath+filename pid 其中live为选填(说明是否只dump出存活的对象) |
-finalizeinfo |
显示在F-Queue中等待Finalizer线程执行finalize方法的对象。(windows下无效) |
-heap |
显示Java堆详细信息,如使用哪种回收器,参数配置,分代情况等(windows下无效) |
-histo |
显示堆中对象统计信息,包括类,实例数量,合计容量 |
-permstat |
已ClassLoader为统计口径显示永久代内存状态(windows下无效) |
-F |
当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照(windows下无效) |
jmap的作用不仅仅是为了获取dump文件,它还可以查询finalize执行队列,Java堆和永久代的详细信息,如空间使用率,当前用的是哪种搜集器等。
下面我们来举个栗子...
jmap -dump:format=b,file=/home/yxcheng/2619.hprof 2619
然后在指定目录下就生成了 .hprof 文件
下载下来,使用MemoryAnalyzer打开...就可以进行愉快的分析了...
jhat:虚拟机堆转存储快照分析工具
Sun JDK提供jhat命令与jmap搭配使用,用来分析jmap生成的堆转存储快照。
jhat内置了一个微型的HTTP/HTML服务器,生成dump文件的分析结果后,可以在浏览器中查看。
不过这个显示的结果很挫....
举个栗子:
利用之前我们使用jmap生成的2619.hprof文件。
当出现Server is ready 字样的时候,在浏览器上输入 服务器IP:7000即可,比如像这样子:
不得不说,真的很挫呀...
jstack:Java堆栈跟踪工具
jstack命名用于生成虚拟机当前时刻的线程快照(一般为threaddump或者javacore文件)
线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈集合。
生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁,死循环,请求外部资源导致的长时间等待等都是导致线程长时间停顿的原因。
线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情,或者等待着什么资源。
-F |
当正常输出的请求不被响应时,强制输出线程堆栈 |
-l |
除堆栈外,显示关于锁的附加信息 |
-m |
如果调用到本地方法的话,可以显示C/C++的堆栈 |
举个栗子:
jstack -l 进程号