emqx日志报错如何定位问题

emqx版本:4.3.6
系统:ubuntu 20.04
背景:11-20 23:20分钟左右出现了后端无法接收设备上报的数据,发现大量设备无法操作的情况,后台发现设备连接正常,设备连接使用的tls端口,但服务端出现了连接失败的情况,服务端使用tcp连接,服务端大概20个客户端,



emqx的日志报错如下

2023-11-20T23:44:24.072508+08:00 [error] device_660831453@220.129.16.144:33244 file: emqx_cm.erl, line: 304, mfa: {emqx_cm,do_discard_session,2}, msg: failed_to_discard_session, pid: <0.5662.7162>, reason: {timeout,{gen_server,call,[<0.30205.6741>,discard,15000]}}, stacktrace: [{gen_server,call,3,[{file,"gen_server.erl"},{line,246}]},{emqx_cm,do_discard_session,2,[{file,"emqx_cm.erl"},{line,289}]},{lists,foreach,2,[{file,"lists.erl"},{line,1342}]},{emqx_cm,'-open_session/3-fun-0-',5,[{file,"emqx_cm.erl"},{line,217}]},{emqx_cm_locker,trans,3,[{file,"emqx_cm_locker.erl"},{line,46}]},{emqx_channel,process_connect,2,[{file,"emqx_channel.erl"},{line,492}]},{emqx_connection,with_channel,3,[{file,"emqx_connection.erl"},{line,659}]},{emqx_connection,process_msg,2,[{file,"emqx_connection.erl"},{line,364}]},{emqx_connection,process_msg,2,[{file,"emqx_connection.erl"},{line,370}]},{emqx_connection,handle_recv,3,[{file,"emqx_connection.erl"},{line,328}]},{proc_lib,wake_up,3,[{file,"proc_lib.erl"},{line,236}]}]
failed_to_discard_session, pid: <0.5662.7162>, reason: {timeout,{gen_server,call, [<0.30205.6741>...

看起来是这个时间段服务可能有异常。这个日志的意思 “某个客户端在重新登陆,登陆过程中发现有同 ID 的客户端,所以尝试先把它踢下去,但是踢了 15s 超时了”

因此,这个时间点。这个被踢的进程肯定:

  1. 要么消息堆积了,一时难以响应
  2. 要么被卡在什么位置了,无法响应

需要给出完整的 EMQX 配置和使用规则、资源、部署方式、机器配置,完整的日志等等信息。

另外,4.3.6 应该是集成了后台DEBUG用的监控。试试

  1. emqx remote_console 进入到 emqx 控制台
  2. 输入 observer_cli:start() 会进行一个类似top 的监控
  3. 按显示的页面底部的快捷键提升,分别按按看看。是否有什么发现
  4. 输入 q+回车 退出监控。两次 ctrl+c 推出 remote_console 控制台

记得先到测试环境上试用一下,以免弄挂生产