<分区>
只是想知道有哪些不同的工具和技术可以用来调试 Java 应用程序的生产问题。 喜欢,
- 获取线程转储的方法和工具有哪些?
- 获取堆转储的方法和工具有哪些?
- 分析上述转储的工具是什么?
(假设都是Linux/Unix环境)
<分区>
只是想知道有哪些不同的工具和技术可以用来调试 Java 应用程序的生产问题。 喜欢,
(假设都是Linux/Unix环境)
最佳答案
What are the ways and tools to take thread dumps?
对于线程转储,您可以使用 JConsole、VisualVM,或者更简单地向目标进程发送 QUIT 信号
kill -QUIT <pid>
或
kill -3 <pid>
从 Java 5 开始,还有 jstack
它是平台独立的,并且有一个很好的 -m
选项来打印 Java 和 native 帧(混合模式)。
What are the ways and tools to take heap dumps?
使用 Sun 虚拟机,jmap
,Sun JConsole , 孙 VisualVM ,SAP JVMMon。对于 IBM VM,检查 this page .实际上,Eclipse MAT wiki 有一个很好的 Getting a Heap Dump总结所有选项的部分。
What are the tools to analyse the above dumps?
对于线程转储,我使用 TDA - Thread Dump Analyzer (对于 Sun JDK)和 IBM Thread and Monitor Dump Analyzer (对于 IBM JDK)。 Samurai也非常好(它像 tail -f
一样工作并自动从您的 std/stderr 中获取线程转储,它还可以读取“-verbose:gc”日志)并且已经针对 VM 进行了测试Apple、BEA、HP、Sun 和 IBM(也可以看 IBM 的 javacore)。
对于堆转储,我使用 VisualVM (对于 Sun JDK)或 IBM Heap Dump Analyzer (仅适用于 IBM JDK)或 über awesome Eclipse MAT取决于我的需要。后者 能够处理 HPROF 二进制堆转储(由 Sun、HP、SAP 等... JVM 生成)、IBM 系统转储(在对其进行预处理之后)以及来自各种不同平台的 IBM 可移植堆转储 (PHD) IBM 平台)。
关于java - 可用于调试 Java 应用程序中的生产问题的工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2931398/