emqx无法清除disconnet的disconnet的客户端导致设备一直连接不上

问题描述

设备掉线后,emqx控制面板显示客户端处于无连接状态,点击右边的清除session按钮,无法清除导致客户端设备重启的时候一直无法连接mqtt

环境信息

  • EMQ X 版本:4.2
  • 操作系统及版本:linux

相关截图


这可能是一个 BUG。你能试试下面的命令,我们看看现在运行的情况吗?

  1. 进入到 emqx 安装目录。执行 ./bin/emqx remote_console 进入 emqx 控制台
  2. 输入 ets:tab2list(emqx_channel). 然后回车,你会得到类似下面的这样的输出
    (emqx@127.0.0.1)3> ets:tab2list(emqx_channel).
    [{<<"Mjk4NzQzODc2NDMyODU2MDI0NzQyMTY1NTE3OTI3MDU1MzG">>,
       <0.4223.0>}]
    
  3. 找到你出问题的那个 ClientId 后面对应的 PID,我这里是 <0.4223.0>
  4. 输入 process_info(<0.4223.0>,current_stacktrace). 然后回车;查看这个链接的当前的调用堆栈。

对这几个卡住的客户端都执行下这个过程,然后把最后打印出来的堆栈贴来看看呢

1 个赞

所以这个问题有得到解决吗

{current_stacktrace,[{gen,do_call,4,
[{file,“gen.erl”},{line,167}]},
{gen_server,call,3,[{file,“gen_server.erl”},{line,219}]},
{emqx_cm,takeover_session,2,
[{file,“emqx_cm.erl”},{line,267}]},
{emqx_cm,‘-open_session/3-fun-1-’,5,
[{file,“emqx_cm.erl”},{line,222}]},
{emqx_cm_locker,trans,3,
[{file,“emqx_cm_locker.erl”},{line,46}]},
{emqx_channel,process_connect,2,
[{file,“emqx_channel.erl”},{line,434}]},
{emqx_connection,with_channel,3,
[{file,“emqx_connection.erl”},{line,553}]},
{emqx_connection,process_msg,3,
[{file,“emqx_connection.erl”},{line,293}]}]}

这个打印出来的堆栈可以帮忙看看吗?

在 4.3上 遇到同样的问题,只能重启 ,
请问 如何解决 ?

嗨,各位 最新版本的 4.3 已经修复了这个问题

目前不重启的解决方案就是杀掉对应的进程

我就是 在 4.3 上 出现的问题,不知道怎么修复的

应该是最新版本的4.3,你的版本是4.3,但是不一定是最新版本,看小版本

不重启的解决方案:
进入emqx控制台

emqx remote_console

找到卡死的进程,杀掉

ets:tab2list(emqx_channel).

process_info(<0.2125.0>).//对应进程id

exit(<0.2125.0>,shutdown).

1 个赞

赞 是这个意思