Java 经常性;OutOfMemoryError:无法创建新的本机线程;使用jbossejb客户端
在JBOSS EAP 6.4上调用EJB服务时经常发生此错误,并且它总是发生在EJBClient上下文registerEJBReceiver/unregisterEJBReceiver上。这两个方法都将runnable提交到名为EJBClient ContextTasksExecutorService的CachedThreadPool(Executors.newCachedThreadPool)中。 可以在类EJBClient上下文中查看代码: 我有一个JBOSS客户端应用程序,它是一个创建固定数量的20个线程(带有Executors.newCachedThreadPool)的批处理程序,但每个任务都调用一个使用EJBClient的CachedThreadPool的EJB远程对象 EJBClientContext的CachedThreadPool中运行的线程数未知,但我检查了一些操作系统限制,这些限制似乎已经足够了: nproc>100000 ulimit-u>100000 kernel.pid_max>100000 /proc/sys/kernel/threads最大值>150000 在批处理的整个过程中,我一直在使用以下命令监视服务器上的线程消耗:Java 经常性;OutOfMemoryError:无法创建新的本机线程;使用jbossejb客户端,java,linux,multithreading,jboss,Java,Linux,Multithreading,Jboss,在JBOSS EAP 6.4上调用EJB服务时经常发生此错误,并且它总是发生在EJBClient上下文registerEJBReceiver/unregisterEJBReceiver上。这两个方法都将runnable提交到名为EJBClient ContextTasksExecutorService的CachedThreadPool(Executors.newCachedThreadPool)中。 可以在类EJBClient上下文中查看代码: 我有一个JBOSS客户端应用程序,它是一个创建固
ps -A -o pid,nlwp,cmd
每个进程的线程数仍然很低(每个进程最多100个线程,同时有2个或3个进程)。尝试分析您的应用程序。如果您使用的是OracleJDK,您可以创建一个分析它的工具。然后,随着时间的推移,您可以进行很好的分析,直到出现错误 也找到了一个好的。试着将分析结果与它进行比较