如何解决 Jboss EAP 7.1.4 java.util.concurrent.TimeoutException:30000 毫秒内未收到调用响应

How to resolve Jboss EAP 7.1.4 java.util.concurrent.TimeoutException: No invocation response received in 30000 milliseconds

当 运行 应用程序时,JBoss EAP 7.1.4 GA 服务器出现 concurrent.Timeout 异常。不幸的是,这不是一个永恒的问题。 在不同的功能流程中不时发生。

例外情况是:

javax.ejb.EJBException: java.util.concurrent.TimeoutException: No invocation response received in 30000 milliseconds
Caused by: javax.ejb.EJBException: java.util.concurrent.TimeoutException: No invocation response received in 30000 milliseconds
at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:207)
at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:112)

... 17 common frames omitted
Caused by: java.util.concurrent.TimeoutException: No invocation response received in 30000 milliseconds
at org.jboss.ejb.client.EJBClientInvocationContext.lambda$awaitResponse(EJBClientInvocationContext.java:876)
at org.jboss.ejb.client.EJBClientInvocationContext$ThrowableResult.getResult(EJBClientInvocationContext.java:1132)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:567)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:503)
at org.jboss.ejb.protocol.remote.RemotingEJBClientInterceptor.handleInvocationResult(RemotingEJBClientInterceptor.java:56)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:569)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:503)
at org.jboss.ejb.client.TransactionPostDiscoveryInterceptor.handleInvocationResult(TransactionPostDiscoveryInterceptor.java:133)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:569)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:503)
at org.jboss.ejb.client.DiscoveryEJBClientInterceptor.handleInvocationResult(DiscoveryEJBClientInterceptor.java:114)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:569)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:503)
at org.jboss.ejb.client.NamingEJBClientInterceptor.handleInvocationResult(NamingEJBClientInterceptor.java:78)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:569)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:503)

在我的 JBoss 配置中使用以下设置:

调用超时 30 秒

事务超时 300 秒(这是 JBoss 中的默认值)

目前的调查结果:

https://access.redhat.com/solutions/1223983

这个解决方案说要升级JBoss6.4,但我已经在使用7.1.4版本

JBoss 错误:

https://issues.jboss.org/browse/JBEAP-8553

https://issues.jboss.org/browse/JBEAP-12075

我使用的 JBoss 以下版本修复了所有错误。

但此外,我注意到超时时会出现此日志:

WARN  [com.arjuna.ats.arjuna] (Periodic Recovery) [] Transaction 0:ffffac18bb91:-672b1e8b:5c25eea9:3be85 has 1 heuristic participant(s)!
WARN  [com.arjuna.ats.jta] (Periodic Recovery) [] ARJUNA016037: Could not find new XAResource to use for recovering non-serializable XAResource XAResourceRecord < resource:null, txid:< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffffac18bb91:-672b1e8b:5c25eea9:3be85, node_name=1, branch_uid=0:ffffac18bb91:-672b1e8b:5c25eea9:3be89, subordinatenodename=null, eis_name=java:jboss/datasources/ix3 >, heuristic: TwoPhaseOutcome.HEURISTIC_HAZARD, product: Microsoft SQL Server/14.00.2002, jndiName: java:jboss/datasources/ix3 com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord@7f64f479 >
WARN  [com.arjuna.ats.jta] (Periodic Recovery) [] XAResourceRecord restored heuristic instance: XAResourceRecord < resource:null, txid:< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffffac18bb91:-672b1e8b:5c25eea9:3be85, node_name=1, branch_uid=0:ffffac18bb91:-672b1e8b:5c25eea9:3be89, subordinatenodename=null, eis_name=java:jboss/datasources/ix3 >, heuristic: TwoPhaseOutcome.HEURISTIC_HAZARD, product: Microsoft SQL Server/14.00.2002, jndiName: java:jboss/datasources/ix3 com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord@7f64f479 >
WARN  [com.arjuna.ats.arjuna] (Periodic Recovery) [] Transaction 0:ffffac18bb91:-672b1e8b:5c25eea9:3be85 restored heuristic participant XAResourceRecord < resource:null, txid:< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffffac18bb91:-672b1e8b:5c25eea9:3be85, node_name=1, branch_uid=0:ffffac18bb91:-672b1e8b:5c25eea9:3be89, subordinatenodename=null, eis_name=java:jboss/datasources/ix3 >, heuristic: TwoPhaseOutcome.HEURISTIC_HAZARD, product: Microsoft SQL Server/14.00.2002, jndiName: java:jboss/datasources/ix3 com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord@7f64f479 >

试图做一些研究并找到问题,但到目前为止没有运气。

Never ending periodic recovery of heuristic participants

JBoss spamming XA Recovery warnings

哪位有这方面经验的可以给点建议,好吗?

注意:一些异常的stack trace因为有公司相关的代码所以不能在这里发布。对此表示歉意

这个问题已经解决了。这是因为以下原因。

  1. 我们的服务器(VM)很少因为 Microsoft windows 更新而挂起。最近的更新是2GB,安装的时候挂了。 CPU 大部分时间内存使用率为 100%,没有分配给其他处理。

  2. 另一个原因是我们的集群配置行为不当,因为集群节点的请求之一被服务器防火墙阻止。这是一个配置错误,因为忘记添加防火墙规则。

一旦解决了这两个问题,问题就不会再发生了。

如果有人遇到此类问题,建议在进行深入调查之前验证所有基础架构基础知识。