emqx假死情况

emqx版本为开源版4.4.3,连接客户端50个左右,在运行一段时间后,服务假死了,而且重连不上,emqx错误日志也停止输出了,重启emqx服务后客户端均正常连接
服务器cpu,内存虽然不足,但是能正常运行,重启前后内存占用无明显差异,

出现问题的时候:

  • 检查 emqx 进程是否被系统挂起。
  • 检查日志:
    • emqx 最后的日志是什么
    • 有没有 warning 日志。
  • 抓包看 MQTT 报文的交互情况。
  • 进入 erlang console 调查:
    • 使用 emqx remote_console 命登录 erlang console,
    • 然后使用 observer_cli:start(). 命令打开监控工具,
    • 然后输入 mq 并回车,按照进程邮箱大小排序,检查有没有邮箱堆积的进程。
1 个赞

谢谢回复~

服务的进程是存在的,查看emqx的error日志,只有 Parse failed for function_clause类似日志,而且在异常时间点之后,error日志再无继续输出,后续重启之后,各个客户端均正常连接,也正常收发消息,而且服务器内存在重启前后没有明显变化。

附上对应error日志截图

后续应该还能再出现这个情况,希望能给一些后续排查的建议
1.抓包
2.mqttx工具进行客户端连接
3.emqx remote_console命令使用(文档上好像没有提供,能有一些细节吗)

从你的描述上来看,可能 emqx 是“真死” 了。

  • 看看 emqx/logs 目录下面有没有 crash_dump 文件
  • 然后检查一下 /var/logs/message 里有没有系统日志,如果是内存过高被系统杀死这种情况会在系统的日志里记录。