JVM性能监控工具

在 java 的 bin 目录下,jdk 提供了很多使用的工具,下面学习一些监控和故障处理的工具。

名称 作用
jps JVM process status tool,显示指定系统内所有的 HotSpot 虚拟机进程
jstat JVM statistics monitoring tool,用于收集 HotSpot 虚拟机各方面的运行数据
jinfo 显示虚拟机配置信息
jmap 生产虚拟机的内存快照 dump 文件
jhat 分析 dump 文件
jstack 显示虚拟机的线程快照

jps 虚拟机进程状况工具

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

jps 可以查看通过 rmi 协议查询开启了 rmi 服务的原创虚拟机进程状态,hostidrmi 注册表中注册的主机。
options
选项 作用
-q 只输出 LVMID,省略主类的名称
-m 输出虚拟机启动时候传递给 main 方法的参数
-l 输出类的全名
-v 输出虚拟机进程启动时 JVM 参数

jstack 分析 java 堆栈

jstack 用来生成当前时刻线程快照。

命令格式:
jstack [ option ] pid
jstack [ option ] executable core
jstack [ option ] [server-id@]remote-hostname-or-IP

jstat 虚拟机统计信息监视工具

jstat 可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、 JIT 编译等运行数据。

命令格式:
jstat [option vmid [interval] [count]]
option
选项 作用
-class 监视类装载、卸载数量、总看见以及类装载消耗的时间
-gc 监视 java 堆状况,包括 eden 区、两个 survivor 区、年老代、永久代等的容量、已用空间、gc 时间合计等
-gccapacity 内容与 -gc 基本相同,输出主要关注 java 堆各个区使用到的最大、最小空间
-gcutil 内容与 -gc 基本相同,关注已使用区域占总空间的百分比
-gccause 内容与 -gcutil 一样,并且多输出导致上一次 gc 产生的原因
-gcnew 监视新生代状况
-gcnewcapacity 与 -gcnew 相同,主要关注使用到的最大、最小空间
-compiler 输出 JIT 编译器编译过的方法、耗时等信息
-gcutil 所产生的内容:
S0、S1 分别代表了 Survivor0 和 Survivor1;
E 代表 Eden 区;
O 代表老年区;
P 代表永久代;
YGC 代表 Young GC 的次数;
YGCT 代表时间

jinfo 查看 java 配置信息工具

命令格式:
jinfo [ option ] pid
jinfo [ option ] executable core
jinfo [ option ] [ server-id@ ] remote-hostname-or-IP

jmap 生产 java 内存 dump

jmap 除了可以生成 dump 文件外,还可以查询 finalize 执行队列,java 堆和永久代的详细信息,如空间使用率和当前用的是哪种收集器等。

命令格式:
jmap [ option ] pid
jmap [ option ] executable core
jmap [ option ] [ server-id@ ] remote-hostname-or-IP
option
-heap
-permstat

jhat 虚拟机堆快照分析工具

我们可以使用 jhat 来分析 jmap 生成的 dump 文件。默认会开 7000 端口进行 web 访问。一般不使用这个命令来分析,会使用专业的工具来分析 dump 文件,如 eclipse memory analyzer 等。