websphere 工作管理器超过最大线程数
Posted
技术标签:
【中文标题】websphere 工作管理器超过最大线程数【英文标题】:websphere work manager exceeding max threads 【发布时间】:2021-09-27 00:47:50 【问题描述】:我定义了一个最大线程数 = 16 的工作管理器,它不是可增长的。但是,在日志中我可以看到线程编号高达 180+。
[WorkManager.Transformer : 180]
[WorkManager.Transformer : 181]
[WorkManager.Transformer : 182]
[WorkManager.Transformer : 183]
我怀疑由于这个原因,线程在等待资源时变得饥饿并在 180 秒后抛出 JDBC ConnectionWaitTimeoutException。
当最大限制设置为 16 时,为什么会产生这么多线程。我还能检查什么?
【问题讨论】:
【参考方案1】:线程索引是在服务器的生命周期内为该线程池创建的总线程数,它不一定表示当前有多少线程处于活动状态。如果池的最小值和最大值不相同,则池将在一段时间未使用后将线程删除到其配置的最小值,然后在需求上升到该最小值以上时创建新线程。新创建线程的索引只是下一个尚未使用的数字。
例如,如果您有一个最小大小为 1 和最大大小为 5 的池,并且您同时向它分派五个工作项,它将创建名称为“Pool : 0”到“Pool : 4”的线程。当这些工作项目完成时,在经过一段时间后,除了其中一个之外,所有项目都将被删除,由最小池大小指定。如果再次将五个工作项分派到池中,将创建四个名为“Pool : 5”到“Pool : 8”的线程,但即使最高索引号为 8,您也只有五个活动线程。
如果您担心实际情况并非如此,您可以从进程中收集一个 javacore(kill -3 <pid>
或通过服务器的管理控制台请求它)并使用“WorkManager.Transformer”简单地计算线程数“以他们的名义——我猜它会是 16 岁或更少。 javacore 还可用于确定导致资源问题的原因,因为您将能够查看线程堆栈以及它们正在等待的任何锁或其他资源。
【讨论】:
以上是关于websphere 工作管理器超过最大线程数的主要内容,如果未能解决你的问题,请参考以下文章
Java面试小短文当任务数超过线程池的核心线程数,如何让它不进入阻塞队列直接启用最大数量的线程去执行任务?
Java面试小短文当任务数超过线程池的核心线程数,如何让它不进入阻塞队列直接启用最大数量的线程去执行任务?