整页缓存的目录堆到几十万个小文件,清理脚本跑两个小时还没删完,磁盘占用一直降不下去,写入也开始变慢。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,每个 URL 落地成一个文件,清理的时候要逐个 stat 和 unlink,目录大到一定程度之后元数据操作比读文件还慢,所以迟迟删不完越积越多。

「文件缓存清理慢」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

find /data/cache -type f -mtime +2 -delete
# 分目录后可以整目录删
du -sh /data/cache

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

具体做法是,按站点和日期分成不同目录存放缓存,别全堆一层;过期清理改成整目录删除,跳过逐个文件的判断;清理放在访问低峰执行,并限制单次删除的文件数量。

最后用这个标准收尾,清理任务半小时之内就能结束,缓存目录大小回到正常水位。

作者 9823189