JDK 提供了一系列用于监控、诊断 Java 进程的工具,它们在 JDK 安装目录的 bin 目录下,有 jps、jcmd、jstack、jinfo、jmap 等。其中jmc、jconsole、jvisualvm 是 GUI 工具,其他大部分都是命令行工具。

cd $JAVA_HOME/bin ls

本篇只是个入门介绍,不涉及深入分析。每一个工具都有它专门的作用,掌握使用方法只是很简单的入门阶段,更重要的是根据工具得到的信息去分析系统存在的问题以及性能瓶颈,每一个工具的使用和分析都可以单独成文。

jps

如果你用过 Linux,那肯定熟悉 ps 命令,用来查看进程列表的。jps 就好比是 ps 命令的子集,它查询的是当前用户下已经启动的 Java 进程。这是进行线上问题排查的大门钥匙,有了它才能下手后面的动作。

下面是 jps 的帮助文档

usage: jps [-help]        jps [-q] [-mlvV] [<hostid>]  Definitions:     <hostid>:      <hostname>[:<port>]

一般的用法是 jps -l,前面一列显示 pid,后面一列显示进程名称。

还可以用下列参数查看更具体的 Java 进程信息,用法为 jps -lv

jstack

查看 Java 进程内当前时刻的线程快照,也就是每条线程正在执行的方法栈情况,用于定位线程停顿、死锁等长时间等待的问题。

以下是 jstack 的帮助文档。

Usage:     jstack [-l] <pid>         (to connect to running process)     jstack -F [-m] [-l] <pid>         (to connect to a hung process)     jstack [-m] [-l] <executable> <core>         (to connect to a core file)     jstack [-m] [-l] [server_id@]<remote server IP or hostname>         (to connect to a remote debug server)  Options:     -F  to force a thread dump. Use when jstack <pid> does not respond (process is hung)     -m  to print