Java虚拟机常用命令

1. 常见使用流程

  1. 先用jps查看当前在运行的java虚拟机;
  2. 然后用jinfo和jstat查看某台虚拟机的参数和运行状态;
  3. 如果要继续深入查看程序的运行状态,则需要使用jstack和jmap查看程序的栈和堆的具体信息。

2. 各个命令的解释

本节转载自《Java虚拟机常用命令工具》

2.1 jps 显示系统中所有Hotspot虚拟机进程

JVM Process Status Tool,该命令用于列出正在运行的虚拟机进程,显示main类的名称和虚
拟机进程id。该命令受当前用户的访问权限影响,比如linux下非root用户只列出当前用户启
动的虚拟机进程。

命令格式:
jps [options] [hostid]

常用参数:
-l 输出主类全名
-v 输出虚拟机进程启动的jvm参数
-m 输出启动时传递给main函数的参数

执行示例:
$ jps -l
3733 sun.tools.jps.Jps
3700 com.leanworld.JVMTools
com.leanworld.JVMTools即为上面的示例代码执行类。

2.2 jinfo 显示虚拟机的配置信息

Configuration Info for Java,用于查看和修改虚拟机的各项参数信息。

命令格式:
jinfo [ option ] pid

常用参数:
-flag name 打印虚拟机该参数对应的值.
-flag [+-]name 使该参数生效或失效.
-flag name=value修改相应参数的值.
-flags 打印传给jvm的参数值.
-sysprops 打印System.getProperties()信息

执行示例:
$jinfo 3700

2.3 jstat 收集Hotspot虚拟机各方面运行数据

JVM Statistics Monitoring Tool,用于监控各种运行状态信息的命令。在只有文本控制台的
环境中(如企业中的生产环境),该工具非常有用。 可以用来显示系统中类装载、垃圾回收、运
行期编译状况等运行数据。

命令格式:
jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]
vmid表示虚拟机唯一标识符,如果是本地虚拟机进程,与LVMID一致,通常为本地虚拟机进
程号。 interval表示查询间隔时间,count表示查询次数。如果省略interval和count参数,表
示查询一次。

常用参数:
class 类装载相关信息.
compiler JIT编译器编译过的方法、耗时等.
gc java堆信息和垃圾回收状况.
gccapacity 关注java堆各个区的最大和最小空间.
gccause 类似gcutil,额外输出导致上一次gc的原因.
gcnew 新生代gc状况.
gcnewcapacity 关注新生代gc使用的最大和最小空间.
gcold 老年代gc状况.
gcoldcapacity 关注老年代gc使用的最大和最小空间.

执行示例:
$ jstat -gcutil 3700 500 4
S0 S1 E O P YGC YGCT FGC FGCT GCT
50.00 0.00 60.78 0.50 12.76 214 0.049 0 0.000 0.049
0.00 25.00 20.27 0.50 12.76 215 0.049 0 0.000 0.049
0.00 25.00 70.91 0.50 12.76 215 0.049 0 0.000 0.049
50.00 0.00 20.27 0.50 12.76 216 0.049 0 0.000 0.049

S0和S1表示Survivor0和Survivor1
E表示新生代Eden,O表示老年代Old,P表示持久代Permanent
以上各参数值表示已使用空间占比。

YGC表示young gc次数,YGCT表示young gc总耗时。
FGC表示Full gc次数,FGCT表示full gc总耗时。
GCT表示所有gc总耗时时间。

2.4 jstack 显示虚拟机的线程栈信息

Stack Trace for Java,用于生成虚拟机当前的线程快照信息,包含每一条线程的堆栈信息。
该命令通常用于定位线程停顿原因,当出现线程停顿时,可通过stack查看每个线程的堆栈信
息,进而分析停顿原因。

命令格式:
jstack [ option ] pid

常用参数:
-l 除堆栈外,显示锁的附加信息
-F 当请求不被响应时,强制输出线程堆栈
-m 混合模式,打印java和本地C++调用的堆栈信息

执行示例:
$ jstack 3700

2.5 jmap 用于生成虚拟机的内存快照信息

Memory Map for Java,可以产生堆dump文件,查询堆和持久代的详细信息等。

命令格式:
jmap [ option ] pid

常用参数:
-dump 生成堆dump文件,格式为: -dump:[live,]format=b,file=<filename>
-heap 显示java堆的详细信息,包括垃圾回收期、堆配置和分代信息等
-histo 显示堆中对象的统计信息,包括类名称,对应的实例数量和总容量
-permstat 统计持久代中各ClassLoader的统计信息。

执行示例:
$ jmap -dump:format=b,file=dump.tmp 3700
Dumping heap to /home/learnworld/dump.tmp …
Heap dump file created
上面这个命令生成了dump.tmp这个dump文件。生成的dump文件可以使用Eclipse Memor
y Analyzer/jhat等工具进行分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值