文章目录
jps/jstat/jinfo/jmap/jhat/jstack 命令行工具
jps/jstat/jinfo/jmap/jhat/jstack 都是 Java 提供的命令行工具。详细介绍查看JVM 性能分析——jdk 自带命令分析工具(jps/jstat/jinfo/jmap/jhat/jstack)
-
jps:查看正在运行的 Java 进程
输入:jps
可以看到运行的测试进程 25168 DemoTest;
-
jinfo:查看和修改环境相关的配置参数
输入:jinfo 25168
可以查看 25168 进程的 JVM 配置信息和系统属性等;
-
jstat:查看 JVM 的内存与GC相关统计信息
输入:jstat -gcutil 25168 1000 10
可以看到 25168 进程的堆内存使用情况和GC次数与耗时;
-
jstack:查看线程堆栈信息
输入:jstack 25168
可以看到 25168 进程中的各线程堆栈信息;
-
jmap;主要用于导出堆转储(Heap Dump)映像文件
输入:jmap -dump:format=b,file=file1.hprof 25168
可以输出 dump 文件——file1.hprof,堆内存的使用数据,使用 JVsiualVM 打开查看各对象数据占用空间情况,用于后续分析;
-
jhat:堆转储文件分析工具
输入:jhat file1.hprof
导入 jmap 导出的 file1.hprof 文件;
上述命令运行,服务启动完后,进入 http://localhost:7000/ 页面可以查看指定类、实例对象相关信息,端口号默认为 7000;
JConsole/JVisualVM/JProfiler 图形化分析工具
上面介绍了 JAVA 提供的命令行工具,可以用于查看内存、线程、堆转储文件(.hprof) dump、分析堆转储文件;但是以上都是基于命令行查看,所有结果都是文本描述,不够直观;所以就有了可视化工具,提供直观的图形化界面,方便分析。
-
JConsole
JConsole 是 Java Development Kit (JDK) 中自带的可视化监控工具。涵盖了 Java 的多项命令;
-
实时监控:显示内存、线程、CPU 和类的加载情况;(jps、jinfo、jstat、jstack)
-
图形化界面:供用户友好的图形界面;
-
适用于简单的性能监控,特别是在开发和测试阶段。
命令行中输入:jconsole,就会弹出以下界面,该界面选择需要连接的 Java 进程,类似于 jps 查看所有 Java 进程;
选择对应的测试进程 25168,可以进入到监控该进程的界面。
概要:类似于 jinfo 命令,展示了相关的环境信息;
概览:在同一个界面实时监控并展示内存、线程、CPU 和类的使用情况;导航栏还有内存(jstat)、线程(jstack)、类的单独选项,用户单独展示相关信息,展示结果和单独使用命令返回的结果一样;
内存页面:可以详细看到堆内存的使用变化曲线,以及年轻代、幸存者区、老年代的回收过程;
线程页面:展示线程运行情况,还可以检测死锁;
-
-
JVisualVM
VisualVM 是一个强大的监控和分析可视化工具,集成了多个 Java 工具,提供更全面的性能监控和分析。
-
实时监控:提供内存、线程、CPU 和类加载情况情况;(jps、jinfo、jstat、jstack)
-
堆转储分析:能够生成并分析堆转储文件,帮助检测内存泄漏;(jmp、jhat)
-
插件支持:支持扩展插件,增加自定义功能;
-
性能分析:可以分析方法调用的性能瓶颈;
-
适用于需要深入分析内存和线程问题的场景,适合开发人员和运维人员在生产环境中进行性能监控和分析。
命令行中输入:jconsole,就会弹出以下界面,可以选择需要连接的 Java 进程,类似于 jps 查看所有 Java 进程;
选择对应的测试进程 25168,可以进入到监控该进程的界面。
概述:类似于 jinfo 命令,展示了相关的环境信息;
监控:在同一个界面实时监控并展示内存、线程、CPU 和类的使用情况;
点击监控页面右上角的堆 Dump,或者应用程序—>堆 Dump,可以导出堆转储(Heap Dump)映像文件;类似于 jmp 命令;对于已有的 dump 文件,点击文件—>装入,即可导入dump 文件,然后进行分析,类似于 jhat 命令;
线程:展示线程的运行状态,点击线程 Dump,可以进入查看线程堆栈的日志信息,和 jstack 命令结果一致;
-
-
JProfiler
JProfiler 是一款商业性能分析工具,不免费,功能强大,提供全面的 Java 应用程序性能监控和分析功能。
-
实时监控:提供内存、CPU 和线程的实时监控。
-
内存分析:深入分析内存使用,检测内存泄漏。
-
性能分析:可视化方法调用和性能瓶颈,生成详细报告。
-
集成支持:可以与多种 IDE(如 IntelliJ IDEA 和 Eclipse)集成。
-
适合需要高级性能分析和调试功能的企业用户,尤其适合对大型复杂系统进行详细分析和优化。
JProfiler 的简单使用可以参考:JVM 性能分析案列——使用 JProfiler 工具分析 dump.hprof 堆内存快照文件排查内存溢出问题
-
命令行工具与图形化工具都是用于JVM性能监控和分析,选择使用 JVisualVM 还是 JDK 命令行工具取决于具体的监控和分析需求。对于简单的性能监控和分析,JVisualVM 提供了更友好的用户体验;而在脚本化或快速执行特定任务时,JDK 命令行工具则更为高效。
- JVisualVM 和 JDK 命令行工具可以互补使用。JVisualVM 提供了图形化的实时监控和分析功能,而 JDK