我看到 websphere 应用程序服务器中存在挂起的线程。如何解决此问题?我应该向应用程序开发人员发送哪些文档?谢谢。
2 回答
最重要的是线程堆栈——它应该与指示挂起线程的消息一起显示,它会告诉你该线程在做什么。
这本身可能还不够,特别是如果该线程正在等待其他线程。在这种情况下,您可能需要线程转储。这可以通过针对非 Windows 系统上的进程 ID 的“kill -3”触发(我必须做更多的研究来告诉你 Windows 上的等效进程,尽管有工具可以模拟“kill -3”) ,并且服务器也可以配置为在检测到挂起的线程时执行此操作,使用 JVM 系统属性 com.ibm.websphere.threadmonitor.dump.java(设置为“true”或表示最大数量的整数值你想要的线程转储)。
线程转储将转到一个名为“javacore...txt”的文件(“...”将是一个表示时间戳之类的长字符串),但在 Solaris 上除外,它将转到服务器的 native_stdout.log。javacore 不仅仅是线程堆栈,因此您可以搜索“线程详细信息”以快速找到该部分。您需要从服务器日志中搜索线程名称/堆栈,以确定哪个线程是挂起的,然后从那里开始。
如果您遇到 WebSphere Application Server 的性能、挂起或高 CPU 问题,IBM 支持团队记录了一个过程来收集诊断和解决此类问题所需的数据。该程序主要基于
- 启用应用程序服务器 verboseGC
- 在出现问题时运行一个脚本,该脚本为有问题的 JVM 收集 3 个 javacore
在此过程结束时,您需要收集:
- *.tar.gz 脚本生成的文件
- 脚本生成的 javacores
- 服务器日志(SystemOut.log、native_stderr.log、...)
并将结果发送给 IBM 支持。
要获取脚本和有关此过程的其他信息,我建议查看以下文章:
AIX 平台也存在类似的文档。