我们使用的是 Wildfly 10.1.0 Final。我们遇到了由于线程不断增长导致的 OutOfMemoryError。在检查了线程转储之后。我们发现有数千个远程处理“端点”任务-N线程。什么是远程处理“端点”任务 N线程?它们是由工作远程创建的吗?重启服务器后,发现一开始只有16个线程:远程处理“端点”任务 1 ~ 远程处理“端点”任务 16。服务器运行数天或数月后,可能会有成百上千的 Remoting 线程:下面列出了线程转储的片段。在这个线程转储中,有几个不同编号的“远程处理“端点”任务 11”。其他任务(例如任务 1 到任务 16)也是如此。所有这些线程除了等待什么都不做。我发现“远程处理”端点任务“线程是由“xnio”创建的。我发现 xnio 有一个问题与我们的场景非常相似:https://issues.jboss.org/browse/XNIO-285它说这个问题已在“xnio 3.6.0.Beta1”中修复。不幸的是,Wildfly 10.1.0 使用的是 xnio 3.4.0。当我尝试升级到 xnio 3.6.5 时,我得到了 org/wildfly/common/context/Contextual 的 java.lang.NoClassDefFoundError。升级包含类“org/wildfly/common/context/Contextual”的 wildfly-common-1.4.0.Final.jar 后,NoClassDefFoundError 仍然存在。有没有其他方法可以防止远程处理“端点”任务线程增长?
2 回答
侃侃无极
TA贡献2051条经验 获得超10个赞
我发现远程处理“端点”任务线程是由javax.management.remote.JMXConnector创建的。我们打开了一些 javax.management.remote.JMXConnector 来访问其他服务器中的 MBean。但没有关闭它们。关闭这些 JMXConnector 实例后,线程就消失了。
javax.management.remote.JMXConnector 使用 xnio 与 MBean 通信。它在打开时会创建一个 XnioWorker,而 XnioWorker 会创建Remoting “端点”任务线程。所以问题不是由EJB引起的。
添加回答
举报
0/150
提交
取消