JVM 基础命令行工具

mgs2002 2020年01月24日 142次浏览

一、jps

虚拟机进程状况工具,查询运行的虚拟机进程名称和ID,跟Lunixps类似。这是很重要的一个命令,因为很多命令行工具会用到jps查询出来的虚拟机进程ID,使用jps -l可查询出运行中的虚拟机ID和类名。
jps.png

二、jstat

虚拟机统计信息监视工具,监控虚拟机运行状况,它可以显示本地或者远程虚拟机进程里的类加载、内存、垃圾回收、即时编译等数据。

命令格式

jstat [option vmid [interval][s|ms] [count]]

参数说明
option :选项,代表用户可以查询的虚拟机信息
vmid :进程ID,通过jps工具获取
interval :查询间隔,如果没有这个默认查询一次
count :查询次数,如果没有这个默认查询一次

jstats -gc 2764 100 10

上面的例子表示需要每100毫秒查询一次虚拟机进程ID为2764的垃圾回收进程。

主要选项(option)

选项作用说明
-class监视类加载、卸载数量、总空间以及类装载耗费时间
-gc监视Java堆情况,包括Eden区、S区、老年代等相关信息
-gcutil监视内容与-gc类似。主要关注已使用空间占总空间百分比
-gccapacity监视内容与-gc类似。主要关注堆各个区域使用到的最大、最小空间
-gccause监视内容与-gcutil一样。但是会额外输出上一次垃圾回收的原因
-gcnew监视新生代垃圾回收情况
-gcold监视老年代垃圾回收情况

jstat项目很多,下面简单演示一下idea开启后占用虚拟机内存(G1)的情况,使用比较常用的选项-gcutil
jstat例子.png
结果表示idea占用新生代Eden区73.58%的空间,S0区未使用,S1区使用了全部的空间,老年代(O)使用了5.78%的空间,元空间(M)使用93.16%空间,压缩使用比例(CCS)为87.75%,发生了两次YGC,总耗时(YGCT)0.018秒,没有发生FCG,所有GC(GCT)总耗时0.018秒。

三、jmap

Java内存映像工具,用于手动生成堆转储快照(dump文件),还可以查询finalizer执行队列,Java堆和方法区的详细信息,比如空间使用率、当前使用的收集器等等。

命令格式

jmap [option] vmid

option里面有些参数只能在Linux/Solaris下面使用。

主要选项(option)

选项作用说明
-dump产生堆转储快照。格式:-dump:[live,]format=b,file=,live表示只导出存活的对象
-heap显示堆详细信息。Linux/Solaris有效
-histo显示堆中对象统计信息,包括类、实例数量、合计容量
-permstat已ClassLoader为口径统计永久代内存状态。Linux/Solaris有效
-F当使用-dump无响应时可使用这个强制生成dump快照。Linux/Solaris有效
-finalizerinfo显示F-Queue中等待Finalizer线程执行finalizer方法的对象。Linux/Solaris有效

四、jhat

堆转储快照分析工具与jmap命令搭配使用,分析堆转储快照。不过一般不会使用这个工具,因为有更专业的分析工具,比如VisualVm,Eclipse Memory Analyzer等等。

五、jstack

java堆栈跟踪工具,用于生成虚拟机当前时刻线程快照。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈集合,目的是定位线程长时间停顿的原因,比如线程死锁,挂起等等

命令格式

jstack [option] vmid

主要选项(option)

选项作用说明
-F当正常输出的请求不被响应时,强制输出线程堆栈
-l除堆栈信息外,显示关于锁的附加信息
-m如果调用本地方法的话,可以显示C/C++的堆栈

死锁排查

待补充...