虚拟机性能监控工具,主要用于监控分析 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,扩展列表,打印线程的额外信息