【发布时间】:2019-04-08 14:01:34
【问题描述】:
在 JBOSS EAP 6.4 上调用 EJB 服务时经常发生此错误,并且总是在 EJBClientContext registerEJBReceiver / unregisterEJBReceiver 上发生。这些方法都将可运行对象提交到名为 ejbClientContextTasksExecutorService 的 CachedThreadPool (Executors.newCachedThreadPool) 中。 代码可以在 EJBClientContext 类中查看: https://raw.githubusercontent.com/wildfly/jboss-ejb-client/87aef56ab787f57a9508c6e2b0f876066ae464fe/src/main/java/org/jboss/ejb/client/EJBClientContext.java
我有一个 JBOSS 客户端应用程序,它是一个创建固定数量的 20 个线程(使用 Executors.newCachedThreadPool)的批处理,但每个任务调用一个使用 EJBClientContext 的 CachedThreadPool 的 EJB 远程对象。
在 EJBClientContext 的 CachedThreadPool 中运行的线程数未知,但我检查了一些似乎绰绰有余的操作系统限制:
nproc > 100000
ulimit -u > 100000
kernel.pid_max > 100000
/proc/sys/kernel/threads-max > 150000
在整个批处理过程中,我一直在使用以下命令观察服务器上的线程消耗:
ps -A -o pid,nlwp,cmd
每个进程的线程数仍然很低(每个进程最多 100 个线程,同时用于 2 或 3 个进程)。
【问题讨论】:
标签: java linux multithreading jboss