Jstack 是一个用于生成 Java 线程转储的工具,可以帮助开发者分析线程状态、死锁、性能瓶颈等问题。
基本用法:
jstack <pid>
这会打印指定进程的所有线程堆栈信息。
显示锁信息:
jstack -l <pid>
该命令会显示线程堆栈以及锁的状态,有助于分析线程阻塞或死锁问题。
强制输出:
jstack -F <pid>
当正常输出请求不被响应时,可以使用 -F
参数强制输出线程堆栈。
分析线程转储文件: 如果将线程转储输出到文件,可以通过工具(如 jstack
或第三方分析工具)进一步分析。
Jmap 是一个用于生成 Java 堆转储文件和分析堆内存的工具,常用于内存泄漏和性能调优。
查看堆内存信息:
jmap -heap <pid>
显示 Java 堆的详细信息,包括年轻代、老年代、元数据区的使用情况。
生成堆转储文件:
jmap -dump:format=b,file=heapdump.hprof <pid>
生成堆转储文件,可用于后续分析。注意:生成堆转储时,应用会暂停执行,因此需要谨慎使用。
显示类加载器信息:
jmap -permstat <pid>
打印类加载器的统计信息,包括加载的类数量、占用的内存等。
显示堆中对象统计信息:
jmap -histo:live <pid>
打印堆中活动对象的统计信息,包括对象数量和占用的内存。
Jhat:
jhat heapdump.hprof
启动一个 HTTP 服务器,通过浏览器访问 http://localhost:7000
,可以查看堆转储文件的详细信息。
MAT(Memory Analyzer Tool): MAT 是一个强大的第三方工具,用于分析堆转储文件。它提供了更直观的界面和分析功能,适合复杂问题的排查。
通过合理使用 Jstack 和 Jmap,可以有效监控和优化 JVM 的运行状态,快速定位和解决性能问题。