【JVM】性能监控工具

574 阅读4分钟

虚拟机性能监控工具,主要用于监控分析 Java 虚拟机运行信息。其中,很多小工具的命名都参考了 UNIX 命令的命名方式。

1. jps(JVM Process Status Tool)

用途: 列出正在运行的虚拟机进程,并显示虚拟机执行 main() 方法所在的类名称以及这些进程的本地虚拟机唯一 ID(LVMID,Local Virtual Machine Identifier)。

命令格式: jps [options] [-mlvV] [<hostid>]

参数说明:

  • options 取值:
    • -q,只输出 LVMID,省略主类名称
    • -m,输出虚拟机进程启动时传递给主类 main() 函数的参数
    • -l,输出主类的全名,如果进程执行的是 JAR 包,则输出 JAR 路径
    • -v,输出虚拟机进程启动时的 JVM 参数
  • hostid:RMI 注册表中注册的主机名

2. jstat(JVM Statistics Monitoring Tool)

用途: 用于监视虚拟机各种运行状态信息的命令行工具,可以显示本地或者远程虚拟机进程中的类加载、内存、垃圾收集、即时编译等运行时数据。

命令格式: jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

参数说明:

  • option:代表用户希望查询的虚拟机信息,主要有三类:类加载、垃圾收集、运行期编译状况。取值如下:
    • -class,监视类加载、卸载数量、总空间以及类装在所耗费的时间
    • -gc,监视 Java 堆状况,包括 Eden 区、2 个 Survivor 区、老年代、永久代等的容量,已用空间,垃圾收集时间合计等信息。
    • -gccapacity,监视内容与 -gc 基本相同,但输出主要关注 Java 堆各个区域使用到的最大、最小空间
    • -gcutil,监视内容与 -gc 基本相同,但输出主要关注已使用空间占总空间的百分比
    • -gccause,与 -gcutil 功能一样,但是会额外输出导致上一次垃圾收集产生的原因
    • -gcnew,监视新生代垃圾收集状况
    • -gcnewcapacity,监视内容与 -gcnew 基本相同,输出主要关注使用到的最大、最小空间
    • -gcold,监视老年代垃圾收集状况
    • -gcoldcapacity,监视内容与 -gcold 基本相同,输出主要关注使用到的最大、最小空间
    • -gcpermcapacity,输出永久代使用到的最大、最小空间
    • -compiler,输出即时编译过的方法、耗时等信息
    • -printcompilation,输出已经被即时编译的方法
  • vmid:如果是本地虚拟机进程,VMID 与 LVMID一致
  • interval:查询间隔,默认单位 ms
  • count:查询次数,默认只查一次

3. jinfo(Configuration Info For Java)

用途: 实时查看和调整虚拟机各项参数。

命令格式: jinfo <option> <pid>

参数说明:

  • option 取值:
    • -flag ,输出指定的参数的值
    • -flag [+|-],启用或关闭指定的虚拟机参数
    • -flag =,修改指定的虚拟机参数
    • -flags,输出虚拟机参数
    • sysprops,输出 Java 系统属性
    • ,输出虚拟机参数和系统属性

4. jmap(Memory Map For Java)

用途: 用于生成堆转储快照(一般称为 heap dump 或 dump 文件)、查询 finalize 执行队列、Java 堆和方法区的详细信息,如空间使用率、当前用的那种收集器等。

命令格式:jmap [option] vmid

option取值:

  • -clstats,显示类加载器统计信息。
  • -finalizerinfo,显示在 F-Queue 中等待 Finalizer 线程执行 finalize 方法的对象。
  • -histo[:live],显示堆中对象统计信息,包括类、实例数量、合计容量
  • -dump:,生成 Java 堆转储快照。格式:-dump:[live,]format=b,file=[filename],其中 live 子参数说明是否只 dump 出存活的对象 dump-options 取值:
    • live:只保存存活的对象,否则所有堆中的对象都会被转储
    • format=b,二进制格式
    • file=,堆转储的文件

5. jhat(JVM Heap Analysis Tool)

用途: 与 jmap 搭配使用,来分析 jmap 生成的堆转储快照,jhat 内置了一个微型的 HTTP/Web 服务器,生成堆转储快照的分析结果后可在浏览器查看。

一般使用工具来进行分析:如 VisualVM、Eclipse Memory Analyzer、IBM HeapAnalyzer等。

6. jstack(Stack Trace For Java)

用途: 用于生成虚拟机当前时刻的线程快照(一般称为 threaddump 或者 javacore 文件)。

命令格式: jstack [option] <pid>

option 取值:

  • -l,除堆栈外,显示关于锁的附加信息
  • -e,扩展列表,打印线程的额外信息