Varnish 6.6.1 触发sml_trimstore()断言异常意外崩溃排查求助
问题根因说明
该断言错误触发的核心原因是正在被引用的后端对象(BOC)被重复关联了存储驱动,导致存储清理逻辑执行时校验失败,属于Varnish 6.6.x分支的已知边界问题,多在大对象占比高、存储频繁触发LRU清理的场景下出现
排查方向
- 存储配置校验
检查启动参数中的-s存储后端配置是否符合Varnish 6的规范,你日志中显示同时加载了smalloc/sfile/sdefault三类存储驱动,确认是否存在vcl_fetch阶段手动指定beresp.storage的逻辑,是否有跨存储的对象操作配置错误。Varnish 5到6对存储驱动的对象生命周期管理逻辑有调整,原有V5的配置直接迁移可能触发隐性冲突。 - 大对象处理逻辑排查
图片缓存场景下大对象占比高,重点排查VCL中针对大体积响应的特殊处理逻辑,是否存在对象已绑定存储后端后重复修改存储属性、或者对象写入过程中被强制标记为过期清理的分支逻辑,这类操作会直接触发本次的断言错误。 - 存储水位验证
确认崩溃发生时的存储使用率,该问题多在存储水位达到阈值、触发LRU主动清理时出现。可以临时调高存储容量阈值后观察崩溃周期,如果崩溃频率明显降低,即可确认是存储清理阶段的并发冲突导致。
规避方案
- 优先升级到Varnish 6.6.2及以上的维护版本,该边界问题已在后续补丁中修复
- 若暂时无法升级,可在VCL中添加单对象大小限制,配置
set beresp.do_stream = true降低大对象写入时的内存占用,同时调低存储清理触发阈值,避免极端场景下的并发清理冲突。
内容的提问来源于stack exchange,提问作者user2781398
相关产品推荐
相关产品推荐

