Shopware 6缓存异常暴涨问题排查求助
Shopware 6缓存暴涨排查方案
一、定位缓存中的大文件/目录
先聚焦缓存目录的空间分布,快速锁定异常来源:
- 查看缓存目录下一级子目录的占用情况:
du -d1 -h ./var/cache - 针对占用最大的目录逐步深入排查,比如发现
prod目录异常:du -d2 -h ./var/cache/prod - 直接筛选出100MB以上的单个大文件:
find ./var/cache -type f -size +100M -exec ls -lh {} \;
二、分析缓存内容的具体信息
Shopware 6基于Symfony缓存组件,不同缓存目录对应不同业务场景,针对性分析:
1. Symfony业务缓存池
缓存文件多为序列化的PHP对象,可通过PHP命令反序列化查看:
- 常规缓存文件:
php -r "print_r(unserialize(file_get_contents('目标缓存文件路径')));" - 若缓存经过gzip压缩:
php -r "print_r(unserialize(gzuncompress(file_get_contents('目标缓存文件路径'))));"
2. HTTP页面缓存
prod/http_cache目录下的文件是完整的HTTP响应内容,直接用cat或less命令查看,能直观看到对应的请求URL、响应头和页面内容,快速定位超大页面缓存。
三、追踪缓存内容的来源
- 从缓存内容反向查找代码逻辑:反序列化后若看到产品ID、分类ID等标识,直接在Shopware代码中搜索相关缓存写入逻辑,比如查找
ProductRepository、Cache服务的调用场景。 - 开启缓存写入日志:临时修改
config/packages/prod/monolog.yaml,添加缓存日志记录:
重启应用后,查看日志中的缓存键和调用栈,即可定位写入来源。monolog: handlers: cache: type: stream path: '%kernel.logs_dir%/cache_writes.log' level: debug channels: ['cache'] - 排查批量操作任务:缓存暴涨常与全量数据同步、产品导出、Elasticsearch索引重建等批量操作相关,检查服务器定时任务、后台运行脚本,确认缓存暴涨时段是否有此类任务执行。
四、常见触发原因参考
- 批量操作未配置正确的缓存失效策略,导致临时缓存大量堆积
- HTTP缓存捕获了超大响应页面(比如包含上万条产品的列表页、内嵌Base64大图的页面)
- 第三方插件缓存逻辑异常,未设置过期时间或缓存了不必要的大对象
- 缓存池配置错误,比如开启持久化但未设置过期规则,导致数据无限累积
内容的提问来源于stack exchange,提问作者Fabian Blechschmidt
相关产品推荐
相关产品推荐

