시나리오에 대한 약간의 배경 지식.
호스트 간에 메시지를 보내기 위해 JMS(OpenMQ 4.5.2)를 사용하는 RH6.5에서 실행되는 분산 애플리케이션이 있습니다.
한 호스트(호스트 A)는 라우터, 스위치 등 네트워크 요소로부터 정보를 수신하고 해당 정보를 다른 호스트(호스트 B)에 전달하여 처리합니다. JMS는 호스트 B에서 실행 중입니다.
JMS를 통해 흐르는 이러한 메시지는 초당 평균 약 100개의 메시지로 흐르며 아무런 문제 없이 수백 개의 메시지가 급증할 수 있습니다.
때때로 메시지 흐름이 중단되고 호스트 B에 아무 것도 도달하지 않으며 호스트 A가 여전히 비슷한 속도로 네트워크에서 데이터를 수신하고 있음을 관찰합니다. 이런 일이 발생하면 호스트 B의 JMS 프로세스가 CPU를 모두 차지합니다.
netstat -o를 사용하여 호스트 B 측 JMS 소켓의 Recv-Q가 매우 높다는 점도 확인했습니다.
Proto Recv-Q Send-Q Local Address Foreign Address State Timer
tcp 268439 0 HostB:9030 HostA:53712 ESTABLISHED off (0.00/0/0)
호스트 A 측에서는 Send-Q도 높습니다.
Proto Recv-Q Send-Q Local Address Foreign Address State Timer
tcp 0 68736 HostA:53712 HostB:9030 ESTABLISHED probe (17.25/0/0)
또한 타이머에서 "프로브" 값을 발견했습니다. 웹을 검색해 보니 이 값의 의미에 대한 정보가 거의 없었습니다.
따라서 문제는
"프로브"의 타이머 값이 무엇을 의미하며 소켓에서 읽거나 소켓에 쓰는 일종의 문제를 반영할 수 있다는 것입니다.