在Java的世界里,性能调优和故障排查是开发者们经常面对的任务。幸运的是,JVM(Java虚拟机)自带了一系列强大的工具,能够帮助我们高效地完成这些任务。本文将为大家介绍几个常用的JVM自带工具,以及它们的使用方法和常见用法。
1.jps(Java Virtual Machine Process Status Tool)
jps用于列出当前正在运行的Java进程,并显示其PID(进程ID)和主类名。
使用方法
- jps:显示所有Java进程的PID和主类名。
- jps -m:显示Java进程的PID、主类名以及传递给main方法的参数。
- jps -v:显示Java进程的PID、主类名以及完整的命令行参数。
示例
jps -v
2. jinfo
jinfo用于查看和调整Java进程的JVM参数。
使用方法
- jinfo:显示指定Java进程的所有JVM参数和系统属性。
- jinfo -flag:显示指定名称的JVM参数的值。
- jinfo -flag [+|-]:开启或关闭指定的JVM参数。
- jinfo -flag=:设置指定的JVM参数的值。
示例
jinfo -flag PrintGC <pid>
3. jstat
jstat是JVM的统计监控工具,用于收集JVM的性能数据,如内存使用、垃圾回收等。
使用方法
- jstat -gc[interval] [count]:显示垃圾收集统计信息。
- jstat -gccapacity:显示各个内存区域的容量。
- jstat -gcutil:以百分比形式显示垃圾收集统计信息。
- jstat -gccause:显示最后一次垃圾回收的原因。
示例
jstat -gc <pid> 1000 10
4. jstack
jstack用于生成Java进程的线程快照,帮助开发者分析线程问题,如死锁、死循环等。
使用方法
- jstack:生成指定Java进程的线程快照。
- jstack -F:当正常模式的jstack无响应时,强制输出线程堆栈。
- jstack -m:同时输出Java堆栈和C/C++堆栈信息。
示例
jstack <pid>
5. jmap
jmap是Java内存映射工具,用于生成堆转储快照(heapdump)和分析内存使用情况。
使用方法
- jmap:显示指定Java进程的内存映射。
- jmap -heap:打印Java堆摘要。
- jmap -histo[:live]:打印堆中对象的统计信息。
- jmap -dump:live,format=b,file=:生成Java堆的dump文件。
示例
jmap -dump:live,format=b,file=heap.bin <pid>
6. jhat
jhat是JVM堆转储快照分析工具,用于分析jmap生成的堆转储文件。
使用方法
- jhat:启动jhat服务器,分析指定的堆转储文件。
- jhat -port:指定jhat服务器的端口号。
示例
jhat heap.bin
启动jhat后,可以通过浏览器访问http://localhost:7000(默认端口为7000)查看分析结果。
7. JConsole & VisualVM
JConsole和VisualVM都是基于JMX(Java Management Extensions)的可视化监控工具,用于监控JVM的各项指标,如内存使用、线程数、类加载等。
使用方法
- 在命令行中输入jconsole或jvisualvm启动工具,然后选择需要监控的Java进程。
示例
jconsole
jvisualvm
jvisualvm 在JDK11 后不再集成。
下载地址:https://visualvm.github.io/
8.小结
通过以上工具的介绍和使用方法,我们可以全面了解Java程序的性能状况,从而进行针对性的优化和调试。这些工具是Java开发者不可或缺的利器,希望大家能够熟练掌握并运用到实际工作中。