EMQ 3.2.2版本 运行时间长了 会有很多established的tcp连接不释放
环境
- EMQX 版本:EMQ 3.2.2
- 操作系统版本:CentOS Linux release 7.6.1810 (Core)
EMQ 3.2.2版本 运行时间长了 会有很多established的tcp连接不释放
3.2.2 版本目前已经停止维护了,目前还在维护的版本是 4.4 和 5.0,建议升级到这些版本上来。印象中这个 Bug 应该是修复过的。
能请教下 这个问题的原因具体是什么呢 目前公司维护的EMQ不敢轻易升级 因为大概有10W+的设备在使用这个EMQ,担心升级后的兼容问题 谢谢
看看你用了什么认证插件,比如 MySQL 认证,是不是访问很慢。
乖乖!有10万个设备,老板竟然 不给额外的钱、额外的时间,来让你做这个 最重要的 后台程序升级+优化!仅仅是害怕升级后不能再用、那不升级服务器被TCP/IP连接大量占用而死掉不能处理消息、也是不能用!
程序员 ,好苦逼 、总是 2难境地 !
你这个,只有下载 3.2.2版本的源码,然后自己尝试修改、编译、部署。
hi 你好 想请教下
EMQ 3.2.2版本 运行时间长了 即使设置了keepalive机制 还是会有很多established的tcp连接不释放
貌似linux操作系统底层的keepalive也是不生效的
1)你下载3.2.2版本的源码,然后修改代码,在tcp/ip socket 建立连接后,创建处理线程前,增加对ip地址的判断,如果这一次连接是个无效连接(即:没有真正的业务数据传递过来),那么:不要开线程。否则开了,你就会关不掉这个ESTABLISH的TCP/IP连接。
2)修改防火墙,增加对这些无效ip地址的过滤。不让它们连接的你的emqx server.
3) 下载linux版的dsniff,然后利用tcpkill杀死那些你认为的idle的tcp/ip连接。
以上方法,仅供参考。
程序员就是苦逼。这些实验会花掉你大量时间。。。。
如果你那些10W+的客户端,可以修改回传emqx server的ip地址,那么你就修改它们到你新搭建的emqx更高版本的server IP。你可以先改10个,运行一段时间,发现效果好,就全部切换 。。。
感谢
我们曾经见过一些 mqtt 连接无法释放并且也踢不掉的问题,大多是因为用了 MySQL 插件, 并且MySQL 被阻塞导致的。
这边没有使用mysql插件 这些未释放的tcp连接处于established的状态 但是没有信息传输 理论上应该是被keepalive关闭的 实施情形确实没有关闭 是不是底层什么机制阻止了这些无效连接的回收?