在 JDK 的命令行中,一般开发人员最耳熟能详的肯定就是 java,javac,javap 等常用命令,不过在 jdk/bin 下还有许多其他的命令行工具,它们被用来监测 JVM 运行时的状态,下面我们来详细解读一下几个常用的工具以及如何使用。
jhat
jhat(JVM Heap Analysis Tool)命令是与 jmap 搭配使用,用来分析 jmap 生成的 dump,jhat 内置了一个微型的 HTTP/HTML 服务器,生成 dump 的分析结果后,可以在浏览器中查看。在此要注意,一般不会直接在服务器上进行分析,因为 jhat 是一个耗时并且耗费硬件资源的过程,一般把服务器生成的 dump 文件复制到本地或其他机器上进行分析。
命令格式
jhat [dumpfile]
示例
$ jhat -J-Xmx512m dump.hprof
eading from dump.hprof...
Dump file created Fri Mar 11 17:13:42 CST 2016
Snapshot read, resolving...
Resolving 271678 objects...
Chasing references, expect 54 dots......................................................
Eliminating duplicate references......................................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.
中间的 -J-Xmx512m 是在 dump 快照很大的情况下分配 512M 内存去启动 HTTP 服务器,运行完之后就可在浏览器打开 Http://localhost:7000 进行快照分析
堆快照分析主要在最后面的 Heap Histogram 里,里面根据 class 列出了 dump 的时候所有存活对象。
高能 tips
分析同样一个 dump 快照,MAT 需要的额外内存比 jhat 要小的多的多,所以建议使用 MAT 来进行分析,当然也看个人偏好。