注:个人学习笔记,不保证正确性,摘抄至《深入理解java虚拟机第二版》
jps(jvmprocess status tool),类似于linux中的ps,可以列出正在运行的虚拟机进程(LVMID:local virtual machine identifier)。
jps –q:只输出LVMID
[admin@113-paycenter ~]$ jps -q
580
19482
20479
jps –m:输出虚拟机进程启动时传给主类main方法的参数
[admin@113-paycenter ~]$ jps -m
19482 QuorumPeerMain/usr/admin/zookeeper/server/zookeeper-3.4.6/bin/../conf/zoo.cfg
20479 Bootstrap start
466 Jps -m
jps –l:输出主类全名,如果进程执行的是jar,输出jar路径。如果服务器上明确知道只启动了一个tomcat,使用该命令查询tomcat id是最方便的方式。
[admin@113-paycenter ~]$ jps -l
19482org.apache.zookeeper.server.quorum.QuorumPeerMain
20479 org.apache.catalina.startup.Bootstrap
691 sun.tools.jps.Jps
jps –v:输出虚拟机进程启动时候jvm参数
[admin@113-paycenter ~]$ jps -v
714 Jps-Denv.class.path=.:/usr/java/latest/lib/dt.jar:/usr/java/latest/lib/tools.jar-Dapplication.home=/usr/java/jdk1.7.0_67 -Xms8m
19482 QuorumPeerMain -Dzookeeper.log.dir=.-Dzookeeper.root.logger=INFO,CONSOLE -Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.local.only=false
20479 Bootstrap-Djava.util.logging.config.file=/opt/soft/tomcat/conf/logging.properties-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -XX:MaxPermSize=256M-Xms2048M -Xmx2048M -Xmn1024M -XX:SurvivorRatio=8-XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails -XX:+PrintGCDateStamps-Djava.endorsed.dirs=/opt/soft/tomcat/endorsed -Dcatalina.base=/opt/soft/tomcat-Dcatalina.home=/opt/soft/tomcat -Djava.io.tmpdir=/opt/soft/tomcat/temp
jstat(jvmstatics monitoring tool)监控虚拟机各种运行状态信息,比如类装载,内存,垃圾收集,jit编译等运行数据。
jstat命令格式如下:
jstat[option vmid [interval [s | ms] [count] ] ]
如果是本地虚拟机,vmid和lvmid是一样的,如果是远程,vmid格式应当是:
[protocol:][//] lvmid [@hostname [:port] / username ]
参数interval和count代表查询间隔和次数,如果两个参数省略,说明只查询一次。假设需要没250毫秒查询一次进程20479的垃圾收集情况,一共查询10次,那命令是:
jstat -gc 20479 250 10
选项 |
作用 |
-class |
监控类装载、卸载数量、总空间以及类装载所消耗的时间 |
-gc |
java堆状况,包括eden区、两个survivor区、老年代永久带的容量、已用空间、gc时间合计 |
-gccapacity |
监控内容与gc基本相同,但输出主要关注java堆各个区域使用到的最大最小空间 |
-gcutil |
监控内容与gc基本相同,但输出主要关注已使用空间占总空间的百分比 |
-gccause |
与-gcutil功能一样,只是会额外输出导致上一次GC产生的原因 |
-gcnew |
监控新生代GC情况 |
-gcnewcapacity |
与-gcnew基本相同,输出主要关注使用到的最大、最小空间 |
-gcold |
监控老年代GC情况 |
-gcoldcapacity |
与-gcold基本相同,输出主要关注使用到的最大、最小空间 |
-gcpermcapacity |
输出永久代使用的最大、最小空间 |
-complier |
输出JIT编译器编译过的方法、耗时信息 |
-printcomplation |
输出已经被JIT编译的方法 |
jinfo(configurationinfo for java)的作用是查看和调整虚拟机各项参数。使用jps –v可以查看虚拟机启动时候的显示参数,但是要查看未被显示的隐藏参数或者系统的默认值,除了去查询资料外,就只能使用jinfo –flag的选项进行查询了,jinfo还可以使用-sysprops把虚拟机进程中的System.getProperties()的内容打印出来。这个命令在jdk1.6后,linux和window都提供了支持,并且加入了运行期间修改虚拟机参数的能力,但是jdk1.6中,对于windows平台仍旧有很大的限制。
jinfo命令格式:
jinfo[option] pid
jmap(memorymap for java)命令用于生成堆内存快照(一般称为heapdump或者dump文件)。MAT(eclipse memory analyzer),对dump文件进行分析。
jmap的作用不仅仅是为了获得dump文件,它还可以查询finalize执行队列、java堆和永久带的详细信息,如空间利用率、当前用的是哪种收集器等。
jmap命令格式:
jmap[ option ] vmid
-dump |
生成java对转储快照。格式为:-dump:[live, ]format=b, file= |
-finalizerinfo |
显示在F-QUEUE中等待Finalizer线程执行finalize方法的对象。只在linux和sonaris平台上有效 |
-heap |
显示java堆的详细信息,如使用哪种回收器、参数配置、分代状况等。只在linux和sonaris平台上有效 |
-histo |
显示堆中对象统计信息,包括类、事例数量、合计容量 |
-permstat |
以ClassLoader为统计口径显示永久带内存状态。只在linux和sonaris平台上有效 |
-F |
当虚拟机进程对-dump选项没有响应时,可以使用这个命令强制生产dump快照。只在linux和sonaris平台上有效 |
jhat(JVMheap analysis tool)命令搭配jmap使用,分析生产的堆快照,内置的一个微型的http服务器,正常情况下不会被使用。
jstack(stacktrace for java)命令用于生成虚拟机当前线程快照(一般称为threaddump或者javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成快照的目的主要是定位线程长时间停顿原因,如死锁、死循环、请求外部资源等导致的常见原因。使用jstack可以查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情或者在等待什么外部资源。
jstack命令格式:
jstack[ option ] vmid
选项 |
作用 |
-F |
当正常的输出的请求不被响应时,强制输出线程堆栈 |
-l |
除堆栈外,显示关于锁的附加信息 |
-m |
如果调用到本地方法,可以显示c/c++的堆栈 |