1. WAS 버전 : WebSphere ND v6.1.0.21
2. OS : AIX v5.3 9L
3. Error 발생 시점 : default JMS queue 를 사용하면서 JMS client 를 작성하여 JMS 에 connect 하여 queue 를받아오다가
(대량의 message 를 JMS client 가 받아오는 경우일 가능성이 높음)
4. Error message :
Caused by: javax.jms.JMSException: CWSIA0241E: An exception was received
during the call to the method
JmsManagedConnectionFactoryImpl.createConnection:com.ibm.websphere.sib.e
xception.SIResourceException:
CWSIC1001E: A client attempted to connect with a remote messaging engine
ibm.ws.sib.jfapchannel.JFapConnectFailedException: CWSIJ0063E:
Caused by: java.net.BindException: the Socket name is already using
at sun.nio.ch.Net.connect(Native Method)
at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:491)
at com.ibm.ws.tcp.channel.impl.SocketIOChannel$StartPrivilegedThread.run
(SocketIOChannel.java:123)
at java.security.AccessController.doPrivileged
(AccessController.java:197)
at com.ibm.ws.tcp.channel.impl.SocketIOChannel.connect
(SocketIOChannel.java:143)
at com.ibm.ws.tcp.channel.impl.ConnectionManager.getConnection
(ConnectionManager.java:142)
at com.ibm.ws.tcp.channel.impl.TCPConnLink.connectCommon
(TCPConnLink.java:240)
at com.ibm.ws.tcp.channel.impl.TCPConnLink.connectAsynch
(TCPConnLink.java:219)
at com.ibm.wsspi.channel.base.OutboundProtocolLink.connectAsynch
(OutboundProtocolLink.java:103)
at com.ibm.ws.sib.jfapchannel.impl.JFapOutboundConnLink.connectAsynch
(JFapOutboundConnLink.java:197)
at
com.ibm.ws.channel.framework.impl.OutboundVirtualConnectionImpl.connectA
synch(OutboundVirtualConnectionImpl.java:71)
at com.ibm.ws.sib.jfapchannel.impl.octracker.ConnectionDataGroup.connect
(ConnectionDataGroup.java:461)
... 16 more
5. 예상 이유 : JMS client 가 JMS 서버에 접속하여 queue 를 받아오기 위하여 connection 을 맺는데 대용량 message 처리의
경우 배정된 port 를 넘어서 connection 을 맺을 경우 발생할 수 있다.
다시 말하면, AIX 에서 port 를 배정할 때 순간적으로 사용되는 것을 위해 ephemeral port 를 배정합니다.
이 port 는 range 가 정해지는데 highest ephemeral port 가 사용되면 자동으로 lowest ephemeral port 로
connect 가 이루어집니다. SO_REUSEADDR 옵션이 사용되지 않으면 AIX 는 자동으로 사용되지 않는
ephemeral port 를 찾아서 client socket 으로 할당하지만 SO_REUSEADDR 옵션이 사용되면 그냥
lowest ephemeral port 를 찾아서 할당하려고 시도하며 이때 이미 lowest ephemeral port 가
server ip/port 와 client ip/port 의 쌍으로 존재하면 사용되지 않은 ephemeral port 가 있더라도 찾지 않고
connect 에 fail 이 발생합니다.
그런데 WAS 의 경우는 SO_REUSEADDR 옵션이 적용되어 있습니다.
6. 조치 방안 : WAS 콘솔 > 서버 > Application Server > {server name} > 통신: 포트 > SIB_ENDPOINT_ADDRESS 의 연관된 전송 보기 > InboundBasicMessaging > TCP 인바운드 채널 (SIB_TCP_JFAP) > 사용자 정의 특성 > 새로작성
을 선택한 후, 아래 설정을 추가한 후 WAS를 재시작하면 됨.
이름: soReuseAddr
값: 0
2. OS : AIX v5.3 9L
3. Error 발생 시점 : default JMS queue 를 사용하면서 JMS client 를 작성하여 JMS 에 connect 하여 queue 를받아오다가
(대량의 message 를 JMS client 가 받아오는 경우일 가능성이 높음)
4. Error message :
Caused by: javax.jms.JMSException: CWSIA0241E: An exception was received
during the call to the method
JmsManagedConnectionFactoryImpl.createConnection:com.ibm.websphere.sib.e
xception.SIResourceException:
CWSIC1001E: A client attempted to connect with a remote messaging engine
ibm.ws.sib.jfapchannel.JFapConnectFailedException: CWSIJ0063E:
Caused by: java.net.BindException: the Socket name is already using
at sun.nio.ch.Net.connect(Native Method)
at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:491)
at com.ibm.ws.tcp.channel.impl.SocketIOChannel$StartPrivilegedThread.run
(SocketIOChannel.java:123)
at java.security.AccessController.doPrivileged
(AccessController.java:197)
at com.ibm.ws.tcp.channel.impl.SocketIOChannel.connect
(SocketIOChannel.java:143)
at com.ibm.ws.tcp.channel.impl.ConnectionManager.getConnection
(ConnectionManager.java:142)
at com.ibm.ws.tcp.channel.impl.TCPConnLink.connectCommon
(TCPConnLink.java:240)
at com.ibm.ws.tcp.channel.impl.TCPConnLink.connectAsynch
(TCPConnLink.java:219)
at com.ibm.wsspi.channel.base.OutboundProtocolLink.connectAsynch
(OutboundProtocolLink.java:103)
at com.ibm.ws.sib.jfapchannel.impl.JFapOutboundConnLink.connectAsynch
(JFapOutboundConnLink.java:197)
at
com.ibm.ws.channel.framework.impl.OutboundVirtualConnectionImpl.connectA
synch(OutboundVirtualConnectionImpl.java:71)
at com.ibm.ws.sib.jfapchannel.impl.octracker.ConnectionDataGroup.connect
(ConnectionDataGroup.java:461)
... 16 more
5. 예상 이유 : JMS client 가 JMS 서버에 접속하여 queue 를 받아오기 위하여 connection 을 맺는데 대용량 message 처리의
경우 배정된 port 를 넘어서 connection 을 맺을 경우 발생할 수 있다.
다시 말하면, AIX 에서 port 를 배정할 때 순간적으로 사용되는 것을 위해 ephemeral port 를 배정합니다.
이 port 는 range 가 정해지는데 highest ephemeral port 가 사용되면 자동으로 lowest ephemeral port 로
connect 가 이루어집니다. SO_REUSEADDR 옵션이 사용되지 않으면 AIX 는 자동으로 사용되지 않는
ephemeral port 를 찾아서 client socket 으로 할당하지만 SO_REUSEADDR 옵션이 사용되면 그냥
lowest ephemeral port 를 찾아서 할당하려고 시도하며 이때 이미 lowest ephemeral port 가
server ip/port 와 client ip/port 의 쌍으로 존재하면 사용되지 않은 ephemeral port 가 있더라도 찾지 않고
connect 에 fail 이 발생합니다.
그런데 WAS 의 경우는 SO_REUSEADDR 옵션이 적용되어 있습니다.
6. 조치 방안 : WAS 콘솔 > 서버 > Application Server > {server name} > 통신: 포트 > SIB_ENDPOINT_ADDRESS 의 연관된 전송 보기 > InboundBasicMessaging > TCP 인바운드 채널 (SIB_TCP_JFAP) > 사용자 정의 특성 > 새로작성
을 선택한 후, 아래 설정을 추가한 후 WAS를 재시작하면 됨.
이름: soReuseAddr
값: 0
'IBM - old > WAS 문제&해결' 카테고리의 다른 글
JMS client 가 Clustering 된 JMS Server 에 접속하여 Connect 를 받아올 때 오랜시간이 걸림 (0) | 2016.05.06 |
---|---|
잘못된 Datasource JNDI mapping 을 넣어도 정상작동 (0) | 2016.05.06 |
같은 머신 내에 있는 WAS 의 remote EJB lookup 시의 오류발생 (0) | 2016.05.06 |
org.xml.sax.SAXParseException: 너무 일찍 파일 끝에 도달했습니다. (0) | 2016.05.06 |
WTRN0063E: 기존의 2단계 성능 자원으로 1단계 성능 자원을 확약하려는 잘못된 시도가 있었습니다. (0) | 2016.05.06 |
댓글