emqx5.8.1 开源版本
服务突然收不到消息了,进emqx后台发现 当前订阅 里面主题为空,为什么会这样呢?
看到mqtt的 连接时间 有更新,可能是断开重边过,和这个有关系吗?
但是在本模拟,连上emqx后关闭wifi模拟断线重连,也复现不出 当前订阅 为空的这种现象
emqx5.8.1 开源版本
服务突然收不到消息了,进emqx后台发现 当前订阅 里面主题为空,为什么会这样呢?
看到mqtt的 连接时间 有更新,可能是断开重边过,和这个有关系吗?
但是在本模拟,连上emqx后关闭wifi模拟断线重连,也复现不出 当前订阅 为空的这种现象
一定断开重连过,有关系。
当 clean start 为 false,断开后只要在 session expire 没过之前再连上来,那订阅关系就不会丢失。但是断开后session expire过期了,就公出现这种情况。你可在 MQTT 会话中设置这个时间。
确实是断开过,日志中对应时间段有这种日志
2025-07-01T18:41:50.037970+08:00 [warning] clientid: center_api_server, msg: socket_error, peername: 172.19.28.191:56466, username: center_api_server, reason: enotconn
服务的emqx连接,clean start 是设置为false, session expire 设置为 永不过期,参数如下:
按道理讲订阅是不会丢失的啊
确实奇怪,你可以用日志追踪看看是什么情况。
针对每个emqx客户端手动创建的 日志追踪吗,这个之前没有开。
没办法现在只能为这个服务,加上一个 连接建立与 连接断开 的 webhook 发送报警短信,除了这种方案,还有其它更好的方式吗?
我没想出来,不过还是建议用完整的日志看看是什么情况,修复一下,而不是发个告警。
报了大量的 socket_error ,这个报错, 是由 dropped_qos2_packet 包id重复使用引起的吗
然后在服务没有收到消息的时刻, 发现有条emqx 的gc 日志,订阅丢失和这个有关吗,在这个时间点之后,就没有收到过消息了,没有收到消息的时间对上了
2025-07-01T18:44:56.428357+08:00 [error] Process: <0.6741881.0> on node ‘emqx@127.0.0.1’, Context: maximum heap size reached, Max Heap Size: 6291456, Total Heap Size: 7047566, Kill: true, Error Logger: true, Message Queue Len: 0, GC Info: [{old_heap_block_size,2487399},{heap_block_size,4560232},{mbuf_size,0},{recent_size,1480831},{stack_size,64},{old_heap_size,0},{heap_size,2072765},{bin_vheap_size,24916244},{bin_vheap_block_size,39121160},{bin_old_vheap_size,0},{bin_old_vheap_block_size,39121160}]
我觉得不是
这个是客户端积累了太多消息,被kill掉了
是的,pid 为 6741881 的进程被干掉了
找不出原因成悬案了 ,现在把这个client id 的日志追踪开启了,只能持续观察了