EMQ连接断开

环境

  • EMQX 版本:4.1
  • 操作系统版本:Linux

重现此问题的步骤

  1. EMQ总是会出现异常断开,通过emqx_ctl listeners命令查看了断开原因,如下:
    shutdown_count : [
    {takeovered,5722},
    {einval,1},
    {normal,9},
    {discarded,3063},
    {frame_too_large,686},
    {function_clause,6079},
    {tcp_closed,69654},
    {idle_timeout,132}
    ]
    麻烦给出相应错误的解释

只需要关注:

  • frame_too_large 客户端报文过大,导致链接断开
  • function_clause 这类肯定是 bug,可以看看日志

其他的算是一些比较正常的原因

  • takeovered, discarded: 表示存在 同名 Client ID 登陆时发生了会话的迁移、和丢弃
  • einval: 表示正处理 Socket 时,Socket 无法使用了。一般是一些网络问题,或者临时 TCP 链接。数量少时可以忽略
  • noraml: 正常断开
  • tcp_closed: 客户端关闭 Socket
  • idle_time: 临时的 TCP 链接,30s内未发送 MQTT 链接握手。

另外 4.1 已经不在维护周期了,建议更新到最新的 5.1.x

您好,这指得是我们服务bug吗?

是 emqx 的,但是 4.1 我们不在维护了。所以建议升级到最新的 5.1.x

好的,谢谢您

客气

你好,我想确认下,如果客户端B去订阅了客户端A pub的topic,客户端A在某个时刻发送了超过一兆的包,是只有客户端A会被踢掉,还是说A和B的套接字都会被broker关闭?

只有客户端 A 的