5

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

  1. 几分钟后恢复的系统挂起 - 要进行调查,我们将需要线程转储(javacore)。
  2. 无法恢复并需要重新启动 WebSphere 的系统挂起 - 为了进行调查,我们将需要线程转储和堆转储。

问题是:当系统挂起时,我们不知道是问题 1 还是问题 2。

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

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

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

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

4

1 回答 1

2

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

但是,我相信您可以通过使用wsadmin scripting来完成您想要的。本文描述了如何在 kill -3 不可用的 Windows 平台上强制执行 javacores 和 heapdumps,但相同的命令可以在任何 WebSphere 系统上运行。

在 wsadmin 或 wsadmin 脚本中,执行:

set jvm [$AdminControl completeObjectName type=JVM,process=server1,*]​
$AdminControl invoke $jvm generateHeapDump​
$AdminControl invoke $jvm dumpThreads​
于 2012-05-16T15:22:58.893 回答