我有一个需要在线程中执行的详尽 Java 应用程序(JRE 1.8.0_201),它部署在 IBM Websphere 9 上。
在 WAS 启动时,应用程序执行似乎很好,但有时多线程功能会丢失,并且只使用一个线程执行。
如果我们再次重新启动 websphere,情况就会恢复正常,执行将再次采用适当的并行线程。
是否有一些我遗漏的 WAS 配置?还是在 Java 或 OS 端?
在 Linux 上的硬件架构下面:
最佳答案
要获得有关问题的最大信息:
线程转储
创建 JVM 中所有线程的当前状态的列表。建议在几十秒/分钟内重复执行此列表(在不同名称的输出中,不要覆盖您的转储),在您的情况下可能是几小时。这允许您捕获更改和可能的死锁。如果没有任何变化并且线程在同一行上,则可能存在问题。
如何进行线程转储:
打开控制台(CMD),使用“cd”命令切换到“/Java/jdkx.x.x_xx/bin”(JDK)。然后输入“jstack JVM_PID >/thread_dump_1”。将“JVM_PID”替换为运行JVM的进程ID(任务管理器-详细信息-PID列)。
您还可以使用 VisualVM 之类的工具进行线程转储:
如何读取线程转储:
精彩文章:https://dzone.com/articles/how-to-read-a-thread-dump
寻找阻塞和等待的线程。可能会有多个线程卡在同一行上,只有一个线程取得了一些进展。
在您的情况下如何读取线程转储:
我会在重新启动后立即进行一些线程转储,然后在出现问题时进行。如果您可以区分一个线程何时结束,另一个线程何时获得进展,我将进行另一个线程转储并比较它们(在第一次结束之前和第二次开始工作之后)。
关于java - 多线程 java 应用程序有时无法在 Websphere 上获取所有线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62494019/