jps

jps的命令跟ps差不多,不过简陋挺多。

  1. // 获取java进程号以及主方法的类名
  2. jps
  3. // 获取java进程号以及主方法的类全称
  4. jps -l
  5. // 只获取java进程号
  6. jps -q
  7. // 获取参数
  8. jps -m
  9. // 获取jvm参数
  10. jps -v
  11. // 获取远程的java进程(没成功过)
  12. jps [hostid]

jstat

利用jps获取到java进程号之后,就可以使用jstat去监控了。

  1. // 获取堆的状况
  2. // 参数1: 进程id
  3. // 参数2: 查询间隔,单位为毫秒
  4. // 参数3: 查询次数
  5. jstat -gc pid
  6. // 获取堆的各个区域使用到的最大、最小空间
  7. jstat -gccapacity pid
  8. // 获取堆的已使用空间占总空间的百分比
  9. jstat -gcutil pid
  10. // 还有众多gc开头的参数,具体以-help解释为主
  11. // 输出JIT编译器的耗时
  12. jstat -compiler
  13. // 输出JIT编译过的方法
  14. jstat -printcompilation

其中的专业术语

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

用于实时查看JVM的各项参数

  1. // 获取进程号为pid的JVM配置
  2. jinfo pid
  3. // flag 用于获取某个参数,常用于隐式参数
  4. // 获取CMSInitatingOccupancyFraction参数
  5. jinfo -flag CMSInitatingOccupancyFraction pid

jmap

用于生成堆转储快照,查询finalize执行队列、Java堆和永久代的详细信息。

  1. // 生成堆转储快照
  2. // pid
  3. jmap -dump pid
  4. // 显示finalize队列
  5. jmap -finalizerinfo pid
  6. // 显示java堆信息,回收器、参数配置、分代状况等
  7. jmap - heap pid
  8. // 显示堆中对象统计信息,包括类、实例数量、合计容量
  9. jmap -histo pid
  10. // 显示永久代内存状态
  11. jmap -permstat pid
  12. // 强制生成快照
  13. jmap -F pid

jhat

分析虚拟机堆转储快照的工具,没有实际用途。

jstack

生成虚拟机当前时刻的线程快照。用于定位线程长时间停顿的问题。

HSDIS

占位

JConsole

终于出现一个使用过的工具了。因为是可视化工具,所以一般应该都看得懂。

VisualVM

  1. 显示虚拟机进程以及进程的配置、环境信息
  2. 监视应用程序的CPU、GC、堆、方法区以及线程的信息
  3. dump以及分析堆转储快照
  4. 方法级的程序运行性能分析,找出被调用最多,运行时间最长的方法
  5. 离线程序快照:收集程序的运行时配置、线程dump、内存dump等信息建立一个快照
  6. 其他三方插件