可用于调试 Java 应用程序中的生产问题的工具 [已关闭]
只是想知道有哪些工具和技术可以调试Java应用程序上的生产问题。喜欢
- 获取线程转储的方法和工具有哪些?
- 获取堆转储的方法和工具有哪些?
- 分析上述转储的工具有哪些?
(假设都在Linux/Unix环境中)
只是想知道有哪些工具和技术可以调试Java应用程序上的生产问题。喜欢
(假设都在Linux/Unix环境中)
获取线程转储的方法和工具有哪些?
对于线程转储,您可以使用 JConsole、VisualVM,或者更简单地说,向目标进程发送 QUIT 信号。
kill -QUIT <pid>
或
kill -3 <pid>
从Java 5开始,还有jstack
,它是独立于平台的,并且有一个很好的选项来打印Java和本机帧(混合模式)。-m
获取堆转储的方法和工具有哪些?
With Sun VMs, , Sun JConsole, Sun VisualVM, SAP JVMMon.对于 IBM 虚拟机,请查看此页面。实际上,Eclipse MAT wiki 有一个很好的 Get a Heap Dump 部分,总结了所有选项。jmap
分析上述转储的工具有哪些?
对于线程转储,我使用 TDA - 线程转储分析器(对于 Sun JDK)和 IBM 线程和监视器转储分析器(对于 IBM JDK)。Samurai也非常好(它像a一样工作,自动从std / stderr中获取线程转储,它还可以读取“-verbose:gc”日志),并且已经针对Apple,BEA,HP,Sun和IBM的VM进行了测试(也可以读取IBM的javacore)。tail -f
对于堆转储,我使用VisualVM(用于Sun JDKs)或IBM Heap Dump Analyzer(仅适用于IBM JDKs)或超棒的Eclipse MAT,具体取决于我的需求。后者能够使用HPROF二进制堆转储(由Sun,HP,SAP等产生...JVM)、IBM 系统转储(预处理后)和来自各种 IBM 平台的 IBM 可移植堆转储 (PHD)。
假设 JDK 6,请查看以下文章以获取正在运行的程序的线程转储:
http://java.sun.com/developer/technicalArticles/Programming/Stacktrace/
您可以使用 JHat 执行堆分析:
http://java.sun.com/javase/6/docs/technotes/tools/share/jhat.html
如果你想做内存转储,看看jmap:
http://java.sun.com/javase/6/docs/technotes/tools/share/jmap.html
或者,如果您需要进行更深入的分析,请查看诸如Yourkit之类的分析器: