java - 如何解决 Jboss EAP 7.1.4 java.util.concurrent.TimeoutException : No invocation response received in 30000 milliseconds

标签 java concurrency jboss jboss7.x

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

异常(exception)是:

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$3(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

这个解决方案说要升级JBoss 6.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

请问有这方面经验的 friend 可以给点建议吗?

注意:一些异常的堆栈跟踪不能在这里发布,因为那里有公司相关的代码。对此表示歉意

最佳答案

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

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

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

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

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

关于java - 如何解决 Jboss EAP 7.1.4 java.util.concurrent.TimeoutException : No invocation response received in 30000 milliseconds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54004487/

相关文章:

java - 这不是工厂模式吗?

go - 如何使用 WaitGroup 确保 goroutines 在 for 循环中完成?

并发访问结构成员

transactions - 交易同步注册问题

java - Java 中的匿名对象

java - HashMap - 更改键值

java - 使用 Hibernate Search 将多值的分面添加到应用程序

scala - 创造 future 而无需开始

java - JBoss EAP 6.1 与 Tomcat 7

java - JBoss6 和 Seam3 环境中的 Seam 邮件