本文适用于 JDK 8-11 HotSpot JVM。
常用的JVM监控与除障命令行工具有: jps, jinfo, jstat, jmap, jstack, jcmd, jhsdb。
- jps: 列举 JVM 进程,输出的 JVM 进程信息主要包括: JVM标识(通常是进程ID),Java 命令行中的 main 类名或JAR文件名和main 方法的参数。该命令只会列举运行该命令的用户拥有权限查看的JVM。
- jinfo: 查看 Java 进程的以下信息: Java 系统属性,JVM -XX 参数,Java 命令行中的参数(JVM参数和应用参数)。
- jstat: 查看JVM统计信息,包括以下几类:
- 类加载信息: 加载的、卸载的类的个数、字节数和时间
- 内存池状态和垃圾收集信息:各内存池的容量、最小值、最大值、已用空间,和垃圾收集次数、时间、原因等。这类信息的 statOption 以 “gc” 开头,包括: gc, gccapacity, gccause, gcnew, gcnewcapacity, gcold, gcoldcapacity, gcmetacapacity 和 gcutil。
- 编译字节码信息:编译任务次数、失败编译任务次数等。
- jmap: 主要有以下用途:
- 查看 Java 堆中每个类的实例数、每个类的所有实例占用的空间
- 查看 Java 堆的配置参数、Java 堆各分代的空间信息。适用于JDK8,不适用于JDK11。
- 转储 Java 堆
- jstack: 打印指定 Java 进程的栈追踪
- jcmd:用途较多,基本可代替 jinfo, jstat, jmap, jstack。
- jhsdb: 用于调试、性能分析、深入理解JVM。(jhsdb 中的 hs 代表 HotSpot?)适用于JDK11,不适用于JDK8。
常用的JVM监控与除 障图形化工具有: jconsole, jvisualvm, VisualGC(IntelliJ IDEA 插件), jmc。其中 jmc 最强大。
jgcutil pid 1000 1000 -gcutil pid 1000 1000
jstajsd pid 1000 1000
-gcutil pid 1000 1000