Um pouco sobre o cenário.
Eu tenho um aplicativo distribuído em execução no RH6.5 que usa o JMS (OpenMQ 4.5.2) para enviar mensagens entre hosts.
Um host (Host A) recebe informações de elementos de rede, como roteadores e switches, e retransmite essas informações para outro host (Host B) para processamento. JMS está sendo executado no host B.
Essas mensagens fluem pelo JMS em média a cerca de 100 mensagens por segundo e podem ter picos de várias centenas de mensagens sem nenhum problema.
Ocasionalmente, observo que o fluxo de mensagens é interrompido, nada chega ao Host B, já que o Host A ainda está recebendo dados da rede em taxas semelhantes. Quando isso acontece, o processo JMS no Host B ocupa toda a CPU.
Usando netstat -o, também notei que o Recv-Q do soquete JMS no lado do Host B é muito alto:
Proto Recv-Q Send-Q Local Address Foreign Address State Timer
tcp 268439 0 HostB:9030 HostA:53712 ESTABLISHED off (0.00/0/0)
No lado do host A, o Send-Q também é alto:
Proto Recv-Q Send-Q Local Address Foreign Address State Timer
tcp 0 68736 HostA:53712 HostB:9030 ESTABLISHED probe (17.25/0/0)
Também notei o valor "probe" no timer. Pesquisando na web, encontrei poucas informações sobre o significado desse valor.
Então, a pergunta é: O que significa um valor de timer "sonda" e isso poderia refletir algum tipo de problema de ler ou escrever no soquete?
Tags networking sockets netstat linux