You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何驱逐VerneMQ内存中缓存的auth系列认证钩子相关数据?

VerneMQ 认证钩子缓存内存溢出问题解决方案

运行环境

  • VerneMQ build : 1.10.4.1+build.76.ref4f0bbab
  • Erlang Version : 22

问题根因

VerneMQ默认开启auth_on_register、auth_on_publish、auth_on_subscribe等钩子的内存缓存,默认无过期回收策略,所有认证请求的结果都会长期驻留Erlang虚拟机内存。动态客户端每次重连接入不同节点时,会在所有接入过的节点生成新的缓存条目,操作系统层面的echo 1 > /proc/sys/vm/drop_caches类命令只能清理系统层面的buff/cache,无法触及Erlang虚拟机内部的缓存数据,因此无效。

可落地解决方案

方案1:关闭认证缓存(优先选择)

如果你的认证后端可以支撑每天4万客户端的重连认证请求,直接关闭全局认证缓存即可从根源解决内存增长问题:

  1. 在vernemq.conf中添加如下配置:
# 关闭全局认证缓存
vmq_auth_cache = off
# 也可单独关闭指定钩子的缓存,按需选择
auth_on_register_cache = off
auth_on_publish_cache = off
auth_on_subscribe_cache = off
  1. 滚动重启集群节点生效,重启后旧缓存会被自动释放,不再生成新的缓存条目,完全不影响固定客户端的正常认证。

方案2:配置缓存TTL自动淘汰

如果认证后端承压能力有限不能关闭缓存,可以配置缓存过期时间自动清理旧条目,比如设置12小时过期:

  • 热生效无需重启,直接执行命令:
    vmq-admin set vmq_auth_cache_ttl=43200
  • 也可写入vernemq.conf永久生效:
vmq_auth_cache_ttl = 43200

所有超过TTL的缓存条目会被自动回收,内存占用会稳定在固定区间内。

方案3:手动清空缓存(临时应急)

如果需要紧急释放当前节点的内存,可以执行命令手动清空所有认证缓存:
vmq-admin metrics reset_auth_cache
该命令执行后当前节点的认证缓存会被立即清空,内存占用直接下降,仅作为临时应急手段使用,未修改配置的情况下后续缓存仍会持续增长。

注:上述所有配置和命令均兼容你当前使用的1.10.x版本和Erlang 22运行环境,无需升级即可直接使用。

内容的提问来源于stack exchange,提问作者Kedar Undale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:00:05