关于该场景的一些背景介绍。
我有一个在 RH6.5 上运行的分布式应用程序,它使用 JMS(OpenMQ 4.5.2)在主机之间发送消息。
一个主机(主机 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)
我还注意到了计时器中的“probe”值。在网上搜索后,我发现关于该值含义的信息很少。
所以,问题是,
“探测”计时器的值是什么意思,这是否反映了从套接字读取或写入某种问题?