2017-05-16 4 views
1

WildFly 8.2.1 최종 대량 설치에서는 재시작이 필요할 때까지 약 1 주 이내에 성능이 저하되고 있습니다. 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][[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)
  • 거래에서 유일하게 다른 참가자가
  • 0 큐 1 (내구성) 항목이 있습니다 오라클 XA 연결입니다 것을 메시지 (메시지 카운트 또는 방금 0 이상)

관련 비즈니스 방법은 @Lock(LockType.READ) 주석 동안 메시지가 싱글 EJB에서 전송에서 소비되고, 그래서 그것은 동시에 호출 할 수있다. 는 EJB는 java:/JmsXATopicConnectionFactoryTopic를 분사 및 방법의 각각의 호출에 대한 새로운 TopicConnection, SessionMessageProducer를 생성한다 (각각의 메시지가 전송되는) 및 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의 이후 릴리스에서는 발생하지 않는다고 추측됩니다.