EMQX5.3.0自动重启

EMQX版本: 5.3.0
操作系统: (Centos 7.9) [Linux gx-iot 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux]
日志:

这个是系统时钟回拨触发的 Erlang VM 退出,不是 MQTT 配置本身问题;日志里的 Monotonic time stepped backwards! 就是特征。
EMQX 5.x 的已知问题里有这条,临时止血可以把 etc/vm.args 里的 +c 设为 false,然后重启节点。
先按这个顺序处理:

  1. 修改 etc/vm.args,加入或调整为 +c false
  2. 重启 EMQX,确认不再出现自动重启。
  3. 检查宿主机时间同步,避免时钟回拨(NTP/chrony/虚拟化宿主机时间源)。
    CentOS 7 可以先跑这几个命令:
timedatectl status
chronyc tracking
chronyc sources -v
journalctl -u chronyd --since "2 hours ago"

当然升级到最新版本也能解决

那个, docker-compose怎么写etc/vm.args, 可以给个例子嘛, 我写了并挂载但无效

先用镜像里的默认文件改一份,再挂载。

mkdir -p ./etc
docker run --rm emqx/emqx-enterprise:5.3.0 cat /opt/emqx/etc/vm.args > ./etc/vm.args
if grep -q '^+c ' ./etc/vm.args; then
  sed -i '' 's/^+c .*/+c false/' ./etc/vm.args
else
  echo '+c false' >> ./etc/vm.args
fi

docker-compose.yml 这样挂:

services:
  emqx:
    image: emqx/emqx-enterprise:5.3.0
    container_name: emqx
    volumes:
      - ./etc/vm.args:/opt/emqx/etc/vm.args:ro
    ports:
      - "1883:1883"
      - "18083:18083"

然后强制重建容器:

docker compose down
docker compose up -d --force-recreate

最后确认两件事:

docker exec emqx sh -c 'ls -l /opt/emqx/etc/vm.args && grep "^+c" /opt/emqx/etc/vm.args'

输出里要看到 +c false,并且 /opt/emqx/etc/vm.args 是文件不是目录。