是否可以选择是否即时生成堆转储?

时间:2012-05-16 10:10:44

标签: unix jvm websphere signals heap-dump

我们有一个部署到UNIX上运行的WebSphere服务器的应用程序,我们遇到了两个问题:

  1. 几分钟后恢复的系统挂起 - 为了调查,我们需要线程转储(javacore)。
  2. 系统挂起,无法恢复并需要重新启动WebSphere - 要进行调查,我们将需要线程转储和堆转储。
  3. 问题是:当系统挂起时,我们不知道它是问题1还是2。

    理想情况下,我们首先要手动生成线程转储,然后等待系统恢复。如果没有,那么我们在重新启动WebSphere之前生成线程转储和堆转储。

    我知道kill -3(或kill -QUIT)命令。该命令将仅生成线程转储(如果参数IBM_HEAPDUMP=false),或者线程转储和堆转储(如果IBM_HEAPDUMP=true)。但是,必须在WebSphere启动之前设置IBM_HEAPDUMP,并且在WebSphere运行时不能更改它。

    关于IBM_HEAPDUMP参数和kill -3命令,我的理解是否正确?

    此外,是否可以按照我描述的方式获取日志? (即,在生成JVM诊断时,选择是否即时生成堆转储)

1 个答案:

答案 0 :(得分:2)

您的理解与我读过的所有内容一致。

但是,我相信您可以使用wsadmin scripting来完成您想要的任务。 {3}}其中kill -3不可用,但可以在任何WebSphere系统上运行相同的命令。

在wsadmin或wsadmin脚本中,执行:

set jvm [$AdminControl completeObjectName type=JVM,process=server1,*]​
$AdminControl invoke $jvm generateHeapDump​
$AdminControl invoke $jvm dumpThreads​