java - 多线程 java 应用程序有时无法在 Websphere 上获取所有线程

标签 java linux multithreading websphere

我有一个需要在线程中执行的详尽 Java 应用程序(JRE 1.8.0_201),它部署在 IBM Websphere 9 上。
在 WAS 启动时,应用程序执行似乎很好,但有时多线程功能会丢失,并且只使用一个线程执行。
如果我们再次重新启动 websphere,情况就会恢复正常,执行将再次采用适当的并行线程。
是否有一些我遗漏的 WAS 配置?还是在 Java 或 OS 端?
在 Linux 上的硬件架构下面:

  • 架构:x86_64
  • CPU 操作模式 (s):32 位、64 位
  • 字节序:小端
  • CPU (s): 4
  • 在线 CPU(s) 列表:0-3
  • 每核线程数:1
  • 每个插槽的内核数:1
  • socket :4
  • 最佳答案

    要获得有关问题的最大信息:
    线程转储
    创建 JVM 中所有线程的当前状态的列表。建议在几十秒/分钟内重复执行此列表(在不同名称的输出中,不要覆盖您的转储),在您的情况下可能是几小时。这允许您捕获更改和可能的死锁。如果没有任何变化并且线程在同一行上,则可能存在问题。
    如何进行线程转储:
    打开控制台(CMD),使用“cd”命令切换到“/Java/jdkx.x.x_xx/bin”(JDK)。然后输入“jstack JVM_PID >/thread_dump_1”。将“JVM_PID”替换为运行JVM的进程ID(任务管理器-详细信息-PID列)。
    您还可以使用 VisualVM 之类的工具进行线程转储:
    enter image description here
    如何读取线程转储:
    精彩文章:https://dzone.com/articles/how-to-read-a-thread-dump
    寻找阻塞和等待的线程。可能会有多个线程卡在同一行上,只有一个线程取得了一些进展。
    在您的情况下如何读取线程转储:
    我会在重新启动后立即进行一些线程转储,然后在出现问题时进行。如果您可以区分一个线程何时结束,另一个线程何时获得进展,我将进行另一个线程转储并比较它们(在第一次结束之前和第二次开始工作之后)。

    关于java - 多线程 java 应用程序有时无法在 Websphere 上获取所有线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62494019/

    相关文章:

    java - 为什么 LinkedBlockingQueue#poll() 可能会挂断?

    c++ - 在不同线程中启动服务器和 IHM

    java - 无法在 Safari 13.0.4 中使用 Selenium 单击元素

    linux - 巨大核心转储的 gdb 内存使用情况

    linux - 在 bash 脚本文件中登录

    linux - 根据第一列的值删除条目

    c - 互斥量和信号量实际上做了什么?

    java - Android Heads Up 通知未显示

    java - 在javafx中创建连续样条曲线

    java - 在集群上部署 war 文件的最佳实践?