1、jps:
JVM process Status Tool,显示系统所有的HotSpot虚拟机进程以及进程的本地虚拟机的唯一ID(LVMID,Local Virtual Machine Identifier)。
对于本地虚拟机进程来说,LVMID与操作系统的进程ID(PID,Process Identifier)是一致的。如果启动了多个虚拟机进程,就需要显示主类的功能才能区分了。
jps命令格式:
jps [option] [hostid]
jps主要选项:
-v :输出虚拟机进程启动时JVM参数。
-q :只输出LVMID,省略主类的名称;
-m :输出虚拟机进程启动时传递给主类main()函数的参数;
-l :输出主类的全名,如果进程执行的是jar包,输出jar包路径;
2、jstat:
用于监视虚拟机各种运行状态信息的命令行工具。
jstat命令格式:
jstat [option vimd] [interval [s|ms] [count]]
VIMD与LVMID的区别:
<1>如果是本地虚拟主机,VIMD与LVMID是一致的。
<2>如果是远程虚拟机进程,
VIMD的格式:[protocol:][//]lvmid[@hostname[:port]/servername]
interval:代表查询间隔;
count:次数。
如果省略上述2个参数,则只查询一次。
jstat主要选项:
jstat -class pid:监视class装载、卸载的数量,总空间及类装载所耗费的时间。
jstat -gc pid:监视java堆状况,包括1个Eden区,2个Survivor区,老生代、持久代等的容量、已用空间。显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。
jstat -gccapacity:监视内容与-gc基本一样,但输出主要关注java堆各区域使用到的最大和最小空间。如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是当前perm内存占用量。其他的可以根据这个类推, OC是old内存的占用量。
jstat -gcutil pid:监视内容与-gc基本一样,但主要输出已使用空间占总空间的百分比。
jstat -gccause pid:与gcutil一样,但是会额外输出导致上一次GC产生的原因。
jstat -gcnew pid:监控新生代GC的状况。
jstat -gcnewcapacity pid:监控内存与-gcnew基本相同,输出主要关注到使用的最大和最小空间。
jstat -gcold pid:监控老生代GC的状况。
jstat -gcoldcapacity pid:监控内存与-gcold基本相同,输出主要关注到使用的最大和最小空间。
jstat -gcpermcapacity pid: 输出永久代使用到的最大和最小空间。
jstat -compiler pid:显示VM实时编译的数量等信息。
jstat -printcompilation pid:输出已经被JIT编译的方法。
3、jinfo:
实时查看和调整虚拟机的各项参数。
jinfo命令格式:
jinfo [option] pid
jinfo主要选项:
jinfo -flag <name> pid : name是JVM参数的名字。
例如:
执行:C:\Users\yyang7>jinfo -flag CMSInitiatingOccupancyFraction 8072
结果:-XX:CMSInitiatingOccupancyFraction=-1
4、jmap:
功能:
<1> 用于生成堆转储快照(heapdump)
如果不适用该命令,还可以尝试试用:-XX:+HeapDumpOnOutMemoryError参数,可以让虚拟机在OOM时自动生成dump文件。(疲劳测试时候常开启该参数)。通过在VM参数后加-XX:+HeapDumpOnOutOfMemoryError -
XX:HeapDumpPath=/home/admin/logs/java.hprof ,在内存溢的时候会dump内存快照及指定内存快照的存储文件.也可以通过命令行dump命令执行时的内存快照.
<2> 查询finalize执行队列,java堆和永久代的详细信息。
jmap命令格式:
jmap [option] vmid
jmap主要选项:
-dump:生成java堆转储快照。格式为:-dump:[live,]format=b,file=<filename> PID,其中live子参数说明是否只dump出存活的对象。
-finalizeinfo:显示在F-Queue中等待Finalize线程执行finalize方法的对象,只在linux和Solaris平台下有效。
-heap:显示java堆的详细信息,如使用哪种回收器,参数配置,分代状况等,只在linux和Solaris平台有效。
-histo:显示堆中对象统计信息,包括类、实例数量和合计容量。
-permstat:以ClassLoader为统计口径显示永久代内存状态,只在linux和Solaris平台有效。
-F:当虚拟机进程堆-dump选项没有响应时,可使用这个选项强制生成dump快照,只在linux和Solaris平台有效。
5、jhat:
虚拟机堆转储快照分析工具,一般不用此工具。
6、jstack:
用于生成虚拟机当前时刻的线程快照,(Threaddump或javacode文件)。
线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合。
主要目的:
定位线程出现长时间停顿的原因,如线程死锁、死循环、请求外部资源导致的长时间等待等。
jstack命令格式:
jstack [option] vmid
jstack主要选项:
-F:当正常输出的请求不被响应时,强制输出线程堆栈。
-l:除堆栈外,显示关于锁的附加信息。
-m:如果调用到本地方法的话,可以显示C/C++信息。