2012-03-23 68 views

回答

15

有两种不同的情况。

应用程序崩溃: 这是一个OOM吗? NPE?什么是例外?如果出现jvm崩溃,您将看到hs_err_.log(http://java.sun.com/j2se/1.5/pdf/jdk50_ts_guide.pdf

查看您可能看到的文件,如果您自己的JNI导致崩溃或JVM错误。

应用程序挂起:我将从visualvm或jstat开始(两者都是JDK的一部分)。你可以看到线程的当前状态,并检查是否有任何应用程序错误..

其他Linux工具,可以帮助看到里面的过程:

  • lsof:您可以检查过程中开得许多文件
  • strace:从系统调用的角度看当前活动。

Oracle tools documentation提供了漂亮的整洁的上市。它也链接Operating System Specific tools

+0

@ Bubby4j:你能找出坠机原因吗?与os有什么关系?我打算评估centos部署我们的工具,一个基于java的工具。 – Jayan 2012-03-24 16:07:43

+0

这是openvz的问题。 – 2013-05-06 13:14:52

13

对于初学者我建议JVisualVM。它随JDK一起提供,因此您只需在命令行中键入jvisualvm即可启动它。

一旦启动,您可以连接到正在运行的JVM,因此您应该能够连接到挂起的Java进程,并检查堆栈转储的所有正在运行的线程以及堆的内容。


其它有用的内置工具包括:

jps运行Java的列表进程ID的过程

jstack打印一个堆栈转储为每个线程在指定的JVM进程

jmap生成指定的JVM进程的堆转储(jvisualvm也可以生成堆转储)

jhat分析使用jmap或jvisualvm生成的堆转储文件


当然,还有更复杂的配置文件可用。 JProfiler颇受好评。

2

在这些情况下(挂起,冻结,...)你必须分析一个堆转储来试图找出你的应用程序中发生了什么,你可以使用JVisualVM来转储,或者你可以添加适当的JVM参数以在发生崩溃时转储堆的内容。

相关问题