0%

Java虚拟机性能监控与故障处理工具

Java虚拟机性能监控与故障处理工具

JDK命令行工具

jps(JVM Process Status Tool) 虚拟机进程状况工具

  • 可以列出正在运行的虚拟机进程,并显示出虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier,LVMID)
  • 对于本地虚拟机来说,LVMID与操作系统的进程ID(Process Identifier,PID)是一致的
  • jps [options] [hostid]
    • options为下列的选项
    • hostid为主机id
选项 作用
-q 只输出LVMID,省略主类的名称
-m 输出虚拟机进程启动时传递给主类main()函数的参数
-l 输出主类的全名,如果进程执行的是jar包,输出jar路径
-v 输出虚拟机进程启动时JVM参数
选项 输出
默认 4652 Jps
-q 14640
-m 6364 Jps -m
-l 2044 jdk.jcmd/sun.tools.jps.Jps
-v 16568 Jps -Denv.class.path=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar -Dapplication.home=C:\Program Files\Java\jdk-11.0.3 -Xms8m -Djdk.module.main=jdk.jcmd

jstat(JVM Statistics Monitoring Tool) 虚拟机统计信息监视工具

  • 用于监视虚拟机各种运行状态信息的命令行工具,可以显示本地或者远程虚拟机进程中类加载、内存、垃圾收集、JIT编译等运行数据
  • jstat [option vmid [interval [s|ms]] [count]]
    • 如果是本地虚拟机进程,VMID和LVMID是一致的
    • 如果是远程虚拟机进程,VMID的格式是[protocol:][//]vmid[@hostname[:port]/servername]
    • 选项option代表着用户希望查询的虚拟机信息,主要分为类装载、垃圾收集、运行期编译状况
选项 作用
-class 监视类装载、卸载数量、总空间以及类装载所消耗的时间
-gc 监视Java堆状况,包含各区的容量、已用空间、GC时间合计等信息
-gccapacity 和-gc基本相同,但主要关注Java堆各个区域使用到的最大空间、最小空间
-gcutil 和-gc基本相同,但主要关注已使用空间占总空间百分比
-gccause 和-gcutil基本相同,但会额外输出导致上一次GC产生的原因
-compiler 输出JIT编译器编译过的方法、耗时等信息
-printcompilation 输出已被JIT编译的方法
jstat不同参数实际运行结果

jinfo(Configuration Info for Java) Java配置信息工具

  • 实时查看和调整虚拟机各项参数
  • jinfo [option] [pid]
选项 作用
-flag <name> to print the value of the named VM flag
-flag [+|-] <name> to enable or disable the named VM flag
-flag <name>=<value> to set the named VM flag to the given value
-flags to print VM flags
-sysprops to print Java system
<no option> to print both VM flags and system properties

jmap(Memory Map for Java) Java内存映像工具

  • 用于生产堆存储快照,还可以查询finalize执行队列、Java堆和永久代的详情信息(如空间使用率、当前使用的是哪种收集器等)
  • jmap [option] vmid
选项 作用
-dump 生成Java堆转储快照。格式为-dump:[live, ]format=b, file=,其中live子参数说明是否只dump出存活的对象
-finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalize方法的对象
-heap 显示Java堆详情信息,如使用哪种回收器、参数配置、分代状况等
-histo 显示堆中对象统计信息,包括类、实例数量、合计容量
-permstat 以ClassLoader为统计口径显示永久代内存对象
-F 当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照

jhat(JVM Heap Analysis Tool) 虚拟机堆转储快照分析工具

  • 和jmap搭配使用,来分析jmap生成的堆转储快照
  • jhat filename
  • JDK 9 已移除

jstack(Stack Trace for Java) Java堆栈跟踪工具

  • 用于生成虚拟机当前时刻的线程快照
  • 线程快照是当前虚拟机内每一条线程正在执行的方法堆栈的集合
  • 生成快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等
  • jstack [option] vmid
选项 作用
-F 当输出的请求不被响应时,强制输出线程的堆栈
-l 除堆栈外,显示关于锁的附加信息
-m 如果调用本地方法的话,可以显示C/C++的堆栈

可视化工具

JConsole(Java Monitoring and Management Console)

VisualVM(All-in-One Java Troubleshooting Tool)