# JDK 的命令行工具
-Dcom.sun.management.jmxremote 开启 JMX 管理功能;JDK 1.6 以上默认开启。
- jps:JVM Process Status Tool,显示指定系统内所有的 HotSpot 虚拟机进程。
- jstat:JVM Statistics Monitoring Tool,用于收集 HotSpot 虚拟机各方面的运行数据。
- jinfo:Configuration Info for Java,显示虚拟机配置信息。
- jmap:Memory Map for Java,生成虚拟机的内存转储快照(heapdump 文件)。
- jhat:JVM Heap Dump Brower,用于分析 heapdump 文件,建立 HTTP/HTML 服务器,在浏览器上查看分析结果。
- jstack:Stack Trace for Java,显示虚拟机的线程快照。
# jps
jps—— 虚拟机进程状况工具
jps [ options ] [hostid]
# options
- -q:只输出 LVMID(Loval Virtual Machine Identifier,对应进程 ID),省略主类的名称。
- -m:输出虚拟机进程启动时传递给主类 main () 函数的参数
- -l:输出主类的全名;如果进程执行的是 Jar 包,输出 Jar 包路径。
- -v:输出虚拟机进程启动时 JVM 参数。
# hostid
通过 RMI 协议查询远程虚拟机进程状态,远程的虚拟机需要开启 RMI 服务。
[protocol:][[//]hostname][:port][/servername]
# jstat
jstat—— 虚拟机统计信息监视工具
jstat [ generalOption | outputOptions vmid [ interval [ s|ms ] [ count ] ] ]
# generalOption | outputOptions
指定 generalOption 后,就对 outputOptions 参数无效了
generalOption
- -help
- -version
- options
outputOptions
jstas -options 命令可以列举支持的选项,或者 man jstat 命令查看每个选项输出结果的说明。
# vmid
如果是本地,则是 LVMID;否则是 hostid
# interval s|ms
默认 ms;interval 监控间隔时间
# count
默认 infinity,监控次数
# jinfo
jinfo——Java 配置信息工具
jinfo [ option ] pid
jinfo [ option ] executable core
jinfo [ option ] [ server-id@ ] remote-hostname-or-IP
# options
- -flag <name>:打印指定的 VM 值;
- -flag [+|-]<name>:开启或关闭指定 VM 参数;
- -flag <name>=<value>:设置 VM 的指定的值;
- -flags: 打印 VM 的参数,包括默认的 VM 参数;
- -sysprops:打印系统属性;
- <no option>:打印 VM 参数和系统属性;
- -h:帮助。
# jmap
jmap——Java 内存映像工具
jmap [ option ] pid
jmap [ option ] executable core
jmap [ option ] [ server-id@ ] remote-hostname-or-IP
# options
- -heap:显示 Java 堆信息;
- -histo [:live]:统计堆中对象情况;
- -clstats:统计类加载信息;
- -finalizerinfo:显示在 F-Queue 队列中等待 Finalizer 线程调用 finalize 方法的对象;
- -dump:<dump-options>:输出 hprof 格式的文件,dump-options 为:
- live:显示存活的对象;
- format=b:二进制文件;
- file=<filename>:文件名。
例子:-dump:live,format=b,file=heap.bin;
- -F:当进程对 - dump 操作无响应时,强制生成快照;
- -J<flag>:直接传递 flag 给运行中的系统;
- -h | -help:帮助。
# jhat
jhat—— 虚拟机堆转储快照分析工具,不建议使用:
- 耗资源;
- 该分析工具比较简陋;
- 从服务器中下载转储文件,用可视化工具分析。
# jstack
jstack——Java 堆栈跟踪工具
jstack [ option ] pid
jstack [ option ] executable core
jstack [ option ] [server-id@]remote-hostname-or-IP
# options
- -m:混合模式,打印包括 Java 以及本地 C/C++ 的堆栈信息;
- -l:打印包括锁的信息;
- -F:当 jstack 输出没响应时,强制输出线程堆栈;
- -h/-help:帮助。
Java 1.5 之后,java.lang.Thread 新增 getAllStackTraces () 方法用于获取所有线程的 StackTraceElement 对象。
# HSDIS
HSDIS——JIT 生成代码反汇编
# Mac 平台
下载 hsdis-amd64.dylib 插件到以下目录:
/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib
- -XX:+UnlockDiagnosticVMOptions
- -XX:+PrintAssembly
- -Xcomp
- -XX:CompileCommand=dontinline,*HSDIS.sum
- -XX:CompileCommand=compileonly,*HSDIS.sum
Product 版 JVM 需要开启 UnlockDiagnosticVMOptions,Debug 或 FastDebug 版可以直接 PrintAssembly;
Xcomp,以编译模式运行;新版移除该参数;
后面两个参数是,不使用内联和只编译 HSDIS 类的 sum 方法。
public class HSDIS { | |
int a = 1; | |
static int b = 2; | |
public int sum(int c) { | |
return a + b + c; | |
} | |
public static void main(String[] args) { | |
new HSDIS().sum(3); | |
} | |
} |
# JDK 的可视化工具
可视化工具比较直观,简单,不详细介绍。
# JConsole:Java 监视与管理控制台
jconsole 命令直接进入图形界面。
# VisualVM:多合一故障处理工具
下载工具,运行打开图形界面。