【发布时间】:2018-02-06 07:57:05
【问题描述】:
我遇到的问题是,有大量已建立的带有 activemq 的套接字。
根据 ActiveMQ 文档,socket 会因为不活动而关闭。但是在我的应用程序中,一段时间后,由于不活动,我有一个巨大的套接字连接。这是我的设置:
客户端配置有soTimeout 30s,connectionTimeout 10s
代理配置的 maxInactivityDuration 为 30 秒
在日志文件中,我遇到以下异常,但我无法理解为什么套接字没有按照 activemq 文档关闭。
[WARN ] [20/Nov/17 23:58:06.473] [Transport] - 传输连接 到:tcp://10.227.129.219:34896 失败: org.apache.activemq.transport.InactivityIOException:通道是 不活动(未尝试连接)太长(> 30000): tcp://10.227.129.219:34896
提到了活动 mq 文档here
使用默认值;如果没有数据被写入或读取 连接 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)
【问题讨论】:
-
我不清楚不活动是什么意思?应用程序是否没有响应(因此它们的 tcp 连接良好(如套接字良好且应用程序冻结)但应用程序超时)?或者就像网络问题和 tcp 连接本身搞砸了?所以如果你想节省网络,你可以在没有发送应用程序数据但仍然 tcp 保持活动状态的情况下关闭套接字。
-
"使用默认值;如果 30 秒内没有从连接写入或读取数据,则 InactivityMonitor 启动。InactivityMonitor 抛出 InactivityIOException 并关闭与连接关联的传输"
-
该评论无助于您找到答案
-
哦原来问题中不存在,所以我用 activemq 文档中的 blockquote 编辑了问题。我担心的是 InactivityMonitor 进程,因为它已经启动,相关的套接字也应该关闭。但是,套接字仍处于建立阶段。