JVM常用命令

814 阅读2分钟

jmap

  • jmap -dump:format=b,file=xxx.bin pid

生成堆转储快照

  • jmap -heap pid

显示java堆详细信息

  • jmap -histo pid

显示堆中对象统计信息

jinfo

jinfo的作用实时查看和调整虚拟机各项参数。

  • jinfo -flag xxx pid

查看未被显示指定参数的系统默认值,例如 jinfo -flag CMSClassUnloadingEnabled pid

  • java -XX:+PrintFlagsFinal pid

jdk1.6及以上通过此命令查看系统默认值

  • jinfo -sysprops pid

把进程中System.getProperties()的内容打印出来

  • jinfo -flag [+|-] pid

设置或取消JVM参数的值,例如:增加 jinfo -flag +PrintGCDetails 12797, 取消 jinfo -flag -PrintGCDetails 12797

  • jinfo -flag = pid

设置指定JVM参数的值

jps

  • jps -l

输出主类的全貌,如果进程执行的是jar包,输出jar路径

  • jps -v

输出虚拟机进程启动时JVM参数

jstat

虚拟机统计信息监视工具

  • 命令格式
jstat [option vmid [interval[s|ms] [count]]]
  • jstat -class pid

监视类装载,卸载数量,总空间以及类的所消耗的时间

  • jstat -gc pid

监视java堆情况,包括Eden区、两个survivor区、老年代、永久代容量、已用空间等

  • jstat -gcutil pid

监视内容与-gc基本相同,但是输出主要关注已使用的空间占总空间的百分比

jstack

用于生成虚拟机当前时刻的线程快照。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈集合,生成快照的目的就是定位耗时长,死锁等导致线程出现长时间停顿原因。

  • 命令格式
jstack [option] pid
  • jstack -l pid

除堆栈外,显示关于锁的附加信息

  • jstack -m pid

如果调用到本地方法,可以显示c/c++的堆栈

  • jstack -F pid

当正常输出的请求不被响应时,强制输出线程堆栈。

其他輔助排查命令

  • top -Hp pid

根据pid找到最耗费cpu的线程

  • printf "%x\n" tid

根据对应值转换为16进制,用于从线程dump文件中,找到对应的线程,例如:printf "%x\n" 18884

  • JS控制台进行16进制转换