当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。希望这可以帮助到您。