Websphere 工作管理器超过最大线程数
websphere work manager exceeding max threads
我定义了一个最大线程数 = 16 的工作管理器,它不可增长。但是,在日志中我可以看到线程编号高达 180+。
[WorkManager.Transformer : 180]
[WorkManager.Transformer : 181]
[WorkManager.Transformer : 182]
[WorkManager.Transformer : 183]
我怀疑因此,线程正在等待资源并在 180 秒后抛出 JDBC ConnectionWaitTimeoutException。
当最大限制设置为 16 时,为什么会产生这么多线程。我还能检查什么?
线程索引是在服务器生命周期内为该线程池创建的线程总数,并不一定表示当前有多少线程处于活动状态。如果池的最小值和最大值不相同,池将在一段时间未使用后将线程删除到其配置的最小值,然后在需求上升到该最小值以上时创建新线程。新创建线程的索引只是下一个尚未使用的数字。
例如,如果您有一个最小大小为 1 和最大大小为 5 的池,并且您同时向其分派五个工作项,它将创建名称为“Pool : 0”到“Pool : 4”的线程.当这些工作项完成时,经过一段时间后,除其中一个外的所有工作项都将被删除,如最小池大小所指定的那样。如果您再次将五个工作项分派到池中,将创建四个名为“Pool:5”到“Pool:8”的线程,但即使最高索引号为 8,您也只有五个活动线程。
如果您担心实际情况并非如此,您可以从进程中收集一个 javacore(kill -3 <pid>
或通过服务器的管理控制台请求它)并简单地计算线程数他们名字中的“WorkManager.Transformer”——我猜它会是 16 或更少。 javacore 还有助于确定导致资源问题的原因,因为您将能够看到线程堆栈以及它们正在等待的任何锁或其他资源。
我定义了一个最大线程数 = 16 的工作管理器,它不可增长。但是,在日志中我可以看到线程编号高达 180+。
[WorkManager.Transformer : 180]
[WorkManager.Transformer : 181]
[WorkManager.Transformer : 182]
[WorkManager.Transformer : 183]
我怀疑因此,线程正在等待资源并在 180 秒后抛出 JDBC ConnectionWaitTimeoutException。
当最大限制设置为 16 时,为什么会产生这么多线程。我还能检查什么?
线程索引是在服务器生命周期内为该线程池创建的线程总数,并不一定表示当前有多少线程处于活动状态。如果池的最小值和最大值不相同,池将在一段时间未使用后将线程删除到其配置的最小值,然后在需求上升到该最小值以上时创建新线程。新创建线程的索引只是下一个尚未使用的数字。
例如,如果您有一个最小大小为 1 和最大大小为 5 的池,并且您同时向其分派五个工作项,它将创建名称为“Pool : 0”到“Pool : 4”的线程.当这些工作项完成时,经过一段时间后,除其中一个外的所有工作项都将被删除,如最小池大小所指定的那样。如果您再次将五个工作项分派到池中,将创建四个名为“Pool:5”到“Pool:8”的线程,但即使最高索引号为 8,您也只有五个活动线程。
如果您担心实际情况并非如此,您可以从进程中收集一个 javacore(kill -3 <pid>
或通过服务器的管理控制台请求它)并简单地计算线程数他们名字中的“WorkManager.Transformer”——我猜它会是 16 或更少。 javacore 还有助于确定导致资源问题的原因,因为您将能够看到线程堆栈以及它们正在等待的任何锁或其他资源。