可用于调试 Java 应用程序中的生产问题的工具 [已关闭]

2022-09-04 22:03:47

只是想知道有哪些工具和技术可以调试Java应用程序上的生产问题。喜欢

  • 获取线程转储的方法和工具有哪些?
  • 获取堆转储的方法和工具有哪些?
  • 分析上述转储的工具有哪些?

(假设都在Linux/Unix环境中)


答案 1

获取线程转储的方法和工具有哪些?

对于线程转储,您可以使用 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)。


答案 2

假设 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之类的分析器:

http://www.yourkit.com/


推荐