본문 바로가기
[프로그래밍]/Apache & Tomcat

ERROR : Unable to receive message through TCP channel

by control+c 2016. 11. 9.
반응형

ERROR 내용 - 톰캣 세션 클러스터링 중 ERROR 발생

11월 09, 2016 9:32:22 오전 org.apache.catalina.ha.session.DeltaManager messageReceived

심각: Manager []: Unable to receive message through TCP channel

java.lang.IllegalStateException: removeAttribute: Session already invalidated

at org.apache.catalina.ha.session.DeltaSession.removeAttribute(DeltaSession.java:656)

at org.apache.catalina.ha.session.DeltaRequest.execute(DeltaRequest.java:182)

at org.apache.catalina.ha.session.DeltaManager.handleSESSION_DELTA(DeltaManager.java:1221)

at org.apache.catalina.ha.session.DeltaManager.messageReceived(DeltaManager.java:1167)

at org.apache.catalina.ha.session.DeltaManager.messageDataReceived(DeltaManager.java:918)

at org.apache.catalina.ha.session.ClusterSessionListener.messageReceived(ClusterSessionListener.java:91)

at org.apache.catalina.ha.tcp.SimpleTcpCluster.messageReceived(SimpleTcpCluster.java:938)

at org.apache.catalina.ha.tcp.SimpleTcpCluster.messageReceived(SimpleTcpCluster.java:919)

at org.apache.catalina.tribes.group.GroupChannel.messageReceived(GroupChannel.java:283)

at org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:84)

at org.apache.catalina.tribes.group.interceptors.TcpFailureDetector.messageReceived(TcpFailureDetector.java:117)

at org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:84)

at org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:84)

at org.apache.catalina.tribes.group.ChannelCoordinator.messageReceived(ChannelCoordinator.java:275)

at org.apache.catalina.tribes.transport.ReceiverBase.messageDataReceived(ReceiverBase.java:292)

at org.apache.catalina.tribes.transport.nio.NioReplicationTask.drainChannel(NioReplicationTask.java:210)

at org.apache.catalina.tribes.transport.nio.NioReplicationTask.run(NioReplicationTask.java:99)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

at java.lang.Thread.run(Thread.java:745)





원인

Tomcat conf/server.xml에 

channelSendOptions 이라는 설정값이 있는데, 값이 8이면 노드가 비동기적으로 전송된다. 

비동기적으로 전송 된 값은 때때로 메시지 도착 순서가 달라진다. 이로인해 이미 무효(삭제)된 세션에 정보를 갱신하려고 할때 위와 같은 에러가 나타나게 된다. 

이럴경우 channelSendOptions의 값을 6으로 변경하면 순서를 보장하는 동기적인 방법은 통신하게 된다. 


<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6">




참조 : https://tomcat.apache.org/tomcat-6.0-doc/config/cluster.html#Attributes




by. 조조나리

반응형

댓글