可用于调试生产的工具Java应用程序中的问题

Jav*_*Guy 13 java java-ee heap-dump

只是想知道什么是各种工具和技术来调试Java应用程序的生产问题.喜欢,

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

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

Pas*_*ent 7

采用线程转储有哪些方法和工具?

对于线程转储,您可以使用JConsole,VisualVM或更简单地将QUIT信号发送到目标进程

kill -QUIT <pid> 
Run Code Online (Sandbox Code Playgroud)

要么

kill -3 <pid>
Run Code Online (Sandbox Code Playgroud)

从Java 5开始,还有jstack一个独立于平台的-m选项,可以选择打印Java和本机帧(混合模式).

采用堆转储的方法和工具有哪些?

使用Sun VM,jmapSun JConsole,Sun VisualVM,SAP JVMMon.对于IBM VM,请查看此页面.实际上,Eclipse MAT wiki有一个很好的Getting a Heap Dump部分,总结了所有选项.

分析上述转储的工具有哪些?

对于线程转储,我使用TDA - Thread Dump Analyzer(适用于Sun JDK)和IBM Thread and Monitor Dump Analyzer(适用于IBM JDK).Samurai也非常好(它的工作方式类似于tail -f自动从std/stderr中获取线程转储,它也可以读取"-verbose:gc"日志)并且已针对来自Apple,BEA,HP,Sun和IBM的VM进行了测试(也可以阅读IBM的javacore).

对于堆转储,我根据需要使用VisualVM(适用于Sun JDK)或IBM Heap Dump Analyzer(仅适用于IBM JDK)或über真棒Eclipse MAT.后者能够使用HPROF二进制堆转储(由Sun,HP,SAP等生成... JVM),IBM系统转储(在预处理它们之后)以及来自各种IBM平台的IBM便携式堆转储(PHD) ).