2017-12-06 1 views
0

activemq를 사용하여 엄청난 수의 소켓이있는 문제가 있습니다.activemq에 소켓을 설치하는 데 걸리는 시간이 매우 깁니다.

ActiveMQ 문서에 따르면 비활성 상태로 인해 소켓이 닫힙니다. 하지만 내 응용 프로그램에서 언젠가 후에, 나는 거대한 소켓 연결을 비활성으로 인해있다.가 soTimeout 30 대를 데

클라이언트 구성은 ConnectionTimeout 10 초

브로커 구성가 30 대

로그 파일에서

, 나는 아래의 예외를 데로 maxInactivityDuration을 가지고 있지만 : 여기 내 설정이다 Activemq 문서에 따라 소켓이 닫히지 않는 이유를 이해할 수 없습니다.

는 [WARN] [20/11월/17 23 : 58 : 06.473] [전송] -로 전송 연결 : TCP : //10.227.129.219 : 34,896 실패 org.apache.activemq.transport. InactivityIOException : TCP : //10.227.129.219 : 34,896

액티브 MQ 문서가 언급 here

사용 번째 채널도 (> 30000) 오래 비활성 (제작 더 연결 시도) 없었다 e 디폴트 값; 데이터가 기록되지 또는 30 초 동안 연결에서 읽은 경우에 InactivityMonitor 차기는. InactivityMonitor은, 내가 사용하고 InactivityIOException을 발생하고 정보를 연결

과 관련된 전송을 종료 activemq 5.13.3. 아래는 netstat 명령의 스냅 샷입니다. 당신이 공유 로그 파일을 기반으로

netstat -an | grep 9999 
tcp  0  0 X.X.X.X:9999   Y.Y.Y.Y:38200  ESTABLISHED 
tcp  0  0 X.X.X.X:9999   Y.Y.Y.Y:44582  ESTABLISHED 
tcp  0  0 X.X.X.X:9999   Y.Y.Y.Y:41278  ESTABLISHED 
... (few hundreds in total) 
+0

비 활동으로 인해 무슨 뜻인지 확실하지 않습니다. 응용 프로그램이 응답하지 않습니다 (따라서 소켓이 양호하고 응용 프로그램이 정지 된 것처럼 좋은 TCP 연결이지만 응용 프로그램 시간이 초과되었습니다)? 아니면 네트워크 문제와 같은 tcp 연결 자체가 엉망이야? 따라서 네트워크를 보존하려면 응용 프로그램 데이터를 보내지 않고 소켓을 닫을 수 있지만 여전히 TCP를 유지하십시오. –

+0

"기본값을 사용하여 30 초 동안 연결에서 데이터를 쓰거나 읽지 않으면 InactivityMonitor가 시작됩니다. InactivityMonitor가 InactivityIOException을 발생시키고 연결과 관련된 전송을 종료합니다." – Apolozeus

+0

이 주석은 도움을주지 못합니다 당신은 대답 –

답변

0

, TCP 핸드 쉐이크는 다음의 ActiveMQ 프로토콜 (응용 프로그램 수준) 설정 될 연결을 기다리고, 이루어졌다. 문제 (예 : 네트워크 연결 등)로 인해 연결을 설정할 수 없습니다. 나는 당신의 tcp keeplive 설정이 가능하다고 생각하고있다. 따라서 TCP 연결은 닫히지 않으며 응용 프로그램 (예 : activemq)도 연결을 닫지 않습니다.

+0

감사합니다. 문제를 해결했으며, 올바른 부분을 언급했습니다. – Apolozeus

+0

TCP keepalive가 활성화 된 경우 연결 *이 닫히거나 재설정됩니다. 그것은 실제로 '연결'을 '생존'시키지 않습니다. 이름에도 불구하고 죽은 것들을 감지합니다. 결국. – EJP

관련 문제