【问题标题】:Recurring "OutOfMemoryError: unable to create new native thread" with JBOSS EJB CLIENT使用 JBOSS EJB CLIENT 反复出现“OutOfMemoryError:无法创建新的本机线程”
【发布时间】: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


    【解决方案1】:

    尝试分析您的应用程序。如果您使用的是 Oracle JDK,您可以创建一个 flight recording 并使用 JMC 对其进行分析。然后您可以随着时间的推移进行良好的分析,直到错误发生。

    还找到了一个不错的article。尝试将分析结果与它进行比较。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      相关资源
      最近更新 更多