当WebSphere挂起/停止时,如何自动获取线程转储?

线程转储对于Java应用程序的故障排除是必不可少的。如果您正在处理与性能相关的问题,内存泄漏,调试等,则通常会被要求进行线程和堆转储。

您可以手动进行线程转储,但如果您想自动执行,则可以按照以下步骤进行操作。以下演示基于

以下演示基于WebSphere 9,但过程与其他WAS版本类似。

JVM停止时进行线程转储

可能存在这样的情况,您希望在JVM停止时进行thread dump。当您不确定JVM是由谁或如何停止时,这将非常有用。

要进行配置:

  • 登录到WebSphere管理控制台
  • 导航到Servers >> Server Types >> WebSphere application servers
  • 进入JVM并展开“Server Infrastructure”下的“Java and Process Management”
  • 点击Process definition
  • 在Additional Properties >> Custom properties下点击“Java Virtual Machine”
  • 点击New并输入Name为
com.ibm.ws.runtime.dumpShutdown
  • Value为true 
  • 点击OK

  • 查看并保存配置

现在,JVM停止时将生成堆转储。

我停止了JVM,并在配置文件路径下的WAS服务器上看到了以下javacore文件。

-rw-r--r--. 1 root root 3179348 Nov 28 22:49 javacore.20161128.224916.4926.0001.txt
-rw-r--r--. 1 root root 3124208 Nov 28 22:49 javacore.20161128.224924.4926.0002.txt

线程挂起时进行线程转储

如果您遇到线程挂起的问题,并且目前您手动进行转储,则可以自动化此过程。

通过进行基本配置,WebSphere将在线程挂起一段时间后生成转储。

  • 登录到WAS控制台并进入相应的JVM
  • 在Server Infrastructure下展开“Administration”,然后点击Custom Properties
  • 添加以下三个属性

com.ibm.websphere.threadmonitor.threshold – 当线程挂起一段时间后,生成转储。该值以秒为单位。

com.ibm.websphere.threadmonitor.interval – 线程监视器应该多久检查一次挂起的线程。该值以秒为单位。

com.ibm.websphere.threadmonitor.dump.java – 在检测到挂起线程时生成转储。值为true。

以上配置将在线程挂起600秒后生成转储,并且WebSphere将每300秒监视一次线程。

获取到转储后,您可以进行analyze and fix the application issue。希望这可以帮助到您。

类似文章