jps
jps的功能也和 ps 命令类似:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类( Main Class, main() 函数所在的类)名称以及这些进程的本地虚拟机唯一 ID。
jps -l
参数说明:
- -q: 只输出LVMID,省略主类的名称
- -m: 输出虚拟机进程启动时传递给主类main()函数的参数
- -l: 输出主类的全名,如果进程执行的是jar包,输出jar路径
- -v: 输出虚拟机进程启动时JVM参数
jstat:
jstat [Options] vmid [interval] [count]
参数说明:
- Options,选项,我们一般使用 -gcutil 查看gc情况
- vmid,VM的进程号,即当前运行的java进程号
- interval,间隔时间,单位为秒或者毫秒
- count,打印次数,如果缺省则打印无数次
结果说明
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
OC:Old代的容量 (字节)
OU:Old代目前已使用空间 (字节)
PC:Perm(持久代)的容量 (字节)
PU:Perm(持久代)目前已使用空间 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)
NGCMN:年轻代(young)中初始化(最小)的大小 (字节)
NGCMX:年轻代(young)的最大容量 (字节)
NGC:年轻代(young)中当前的容量 (字节)
OGCMN:old代中初始化(最小)的大小 (字节)
OGCMX:old代的最大容量 (字节)
OGC:old代当前新生成的容量 (字节)
PGCMN:perm代中初始化(最小)的大小 (字节)
PGCMX:perm代的最大容量 (字节)
PGC:perm代当前新生成的容量 (字节)
S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
E:年轻代中Eden(伊甸园)已使用的占当前容量百分比
O:old代已使用的占当前容量百分比
P:perm代已使用的占当前容量百分比
S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)
S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节)
ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)
DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满)
TT: 持有次数限制
MTT : 最大持有次数限制
jinfo Java配置信息工具
jinfo -sysprops 1011
jinfo( Configuration Info for Java) 的作用是实时地查看和调整虚拟机各项参数。
jmap Java内存映像工具
jmap( Memory Map for Java)命令用于生成堆转储快照。
-XX:+HeapDumpOnOutOfMemoryError
参数,可以让虚拟机在 OOM 异常出现之后自动生成 dump 文件,通过-XX:+ HeapDumpOnCtrlBreak
参数则可以使用[ Ctrl]+[ Break] 键让虚拟机生成 dump 文件,又或者在 Linux 系统下通过Kill- 3
命令发送进程退出信号“吓唬”一下虚拟机,也能拿到 dump 文件。
jmap [option] vmid
option参数说明
- -dump: 生成Java堆转储快照。格式为:-dump:[live, ]format=b, file=<filename>, 其中live子参数说明是否只dump出存活的对象
- -finalizerinfo: 显示在F-Queue中等待Finalizer线程执行finalize方法的对象。只在Linux/Solaris平台下有效
- -heap: 显示Java堆详细新,如使用哪种回收器、参数配置、分代状况等。只在Linux/Solaris平台下有效
- -histo: 显示堆中对象统计信息,包括类、实例数量、合计容量
- -permstat: 以ClassLoader为统计口径显示永久带内存状态。只在Linux/Solaris平台下有效
- -F: 当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照,只在Linux/Solaris平台下有效
jmap -dump:format=b,file=dumpfile.bin 3500
查看JVM中的对象信息
jmap -histo:live 6788 > /usr/local/tomcat/tempfile
jhat 虚拟机堆转储快照分析工具
一般都不会去直接使用 jhat 命令来分析 dump 文件。
jstack Java堆栈跟踪工具
jstack( Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照
生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。线程出现停顿的时候通过 jstack 来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情,或者等待着什么资源。
jstack [option] vmid
参数说明:
- -F: 当正常输出的请求不被响应时,强制输出线程堆栈
- -l: 除堆栈外,显示关于锁的附加信息
- -m: 如果调用到本地方法的话,可以显示C/C++的堆栈
HSDIS JIT生成代码反汇编
随着技术的发展,高性能虚拟机真正的细节实现方式已经渐渐与虚拟机规范所描述的内容产生了越来越大的差距,虚拟机规范中的描述逐渐成了虚拟机实现的“概念模型”。
HSDIS的作用是让 HotSpot 的- XX:+ PrintAssembly 指令调用它来把动态生成的本地代码还原为汇编代码输出,同时还生成了大量非常有价值的注释。