2017-05-16 43 views
1

在WildFly 8.2.1-Final高容量安装中,我们在大约一周内遇到降级性能问题,直到需要重新启动为止,并且因为发生JMS消息而出现越来越多的故障在状态ABORT_ONLY交易:WildFly - HornetQ连接超时和性能问题

Caused by: javax.ejb.EJBException: javax.jms.JMSException: Could not create a session: IJ000457: Unchecked throwable in managedConnectionReconnected() 
Caused by: javax.resource.ResourceException: IJ000457: Unchecked throwable in managedConnectionReconnected() cl=org[email protected]3915e409[state=NORMAL managed [email protected] connection handles=0 lastUse=1494579251303 trackByTx=false po[email protected]691085ec [email protected][pool=HornetQConnectionDefinition] [email protected][xaResource=[email protected] pad=false overrideRmValue=null productName=HornetQ productVersion=2.0 jndiName=java:/JmsXA] txSync=null] 
     at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.reconnectManagedConnection(AbstractConnectionManager.java:780) 
     at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:518) 
     at org.hornetq.ra.HornetQRASessionFactoryImpl.allocateConnection(HornetQRASessionFactoryImpl.java:948) 
     ... 261 more 
Caused by: javax.resource.ResourceException: IJ000461: Could not enlist in transaction on entering meta-aware object 
     at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.managedConnectionReconnected(TxConnectionManagerImpl.java:551) 
     at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.reconnectManagedConnection(AbstractConnectionManager.java:775) 
     ... 263 more 
Caused by: javax.transaction.SystemException: IJ000356: Failed to enlist: java.lang.Throwable: Unabled to enlist resource, see the previous warnings. tx=TransactionImple < ac, BasicAction: 0:ffff0a0001c3:682851c6:5900737b:dd09939 status: ActionStatus.ABORT_ONLY > 
     at org.jboss.jca.core.connectionmanager.listener.TxConnectionListener$TransactionSynchronization.checkEnlisted(TxConnectionListener.java:848) 
     at org.jboss.jca.core.connectionmanager.listener.TxConnectionListener.enlist(TxConnectionListener.java:383) 
     at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.managedConnectionReconnected(TxConnectionManagerImpl.java:544) 
     ... 264 more 

之所以事务处于状态ABORT_ONLY是以前记录的一个警告:

2017-05-30 11:33:15,977 WARN [com.arjuna.ats.jta] (Thread-123) ARJUNA016086: TransactionImple.enlistResource setTransactionTimeout on XAResource < formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a0001c3:-7a698606:591fe1ff:82cea51, node_name=1, branch_uid=0:ffff0a0001c3:-7a698606:591fe1ff:830e516, subordinatenodename=null, eis_name=java:/JmsXA > threw: XAException.XAER_RMERR: javax.transaction.xa.XAException 
Caused by: HornetQConnectionTimedOutException[errorType=CONNECTION_TIMEDOUT message=HQ119014: Timed out waiting for response when sending packet 51] 
     at org.hornetq.core.protocol.core.impl.ChannelImpl.sendBlocking(ChannelImpl.java:390) 
     at org.hornetq.core.client.impl.ClientSessionImpl.start(ClientSessionImpl.java:1901) 

一些细节:

  • 两种分组类型得到的超时是51(SESS_XA_START)和63(SESS_XA_SET_TIMEOUT
  • 在交易唯一的其他参与者是Oracle XA连接
  • 现有0队列和1(耐久)话题邮件被从耗尽(消息计数处于或略高于0)

而相关的业务方法与@Lock(LockType.READ)注释的消息从一个单EJB发送的,因此它可以同时被调用。 的EJB喷射java:/JmsXATopicConnectionFactoryTopic并创建关于该方法的每次调用一个新的TopicConnectionSessionMessageProducer(被发送的每个消息),并负责关闭它们全部在一个finally {}块。

由于超时发生发送数据包51(SESS_XA_START)和63(SESS_XA_SET_TIMEOUT)似乎开始会话很慢或挂起。

任何想法可能是什么原因?

回答

0

由于我们可以看到,在成千上万的这些错误中只涉及了几个不同的连接,我们怀疑连接以某种方式破坏并停留在池中,因此这些断开的连接被重用,从而导致连续的错误。在此similar issue

帖子#5说:

从JmsXA连接工厂的连接确实从 池来。但是,这些连接中的每一个都有一个连接到 的侦听器,以便在发生连接级错误时,JCA实施应自动将 踢出池。 关于你的问题最奇怪的是,一切都是本地的,所以 不应该是任何破损的连接或 的任何连接问题。

为了确保这些断开的连接是靠我们从ironjacamar核-IMPL 1.1.9在AbstractConnectionManager#reconnectManagedConnection(ConnectionListener)插入799行cl.getManagedConnection().destroy()通话中剔除,取而代之的JAR现在就让几个星期系统运行。

目前运行稳定,不会减速甚至挂起。

一些记录添加到相同的方法记录该池的统计数据,我们可以看到,在这段时间内100个连接被摧毁,但更重要的是,在每一个初始误差单独的连接是参与的,所以这些断开的连接不重用任何更多。

导致连接断开的初始错误仍然不清楚。从日志记录看来,两个线程同时使用相同的JMS连接,搞乱了导致超时的通信并最终导致连接处于中断状态。

另一种猜测是,这是Ironjacamar 1.1.9中的一个问题,并且很久以前就已修复,并且在以后的WildFly版本中不会发生。