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

如何仅保留PHP 8中OPcache生成的最新缓存文件夹?

多重复缓存目录的产生原因

OPcache文件缓存根目录下的一级子文件夹,是基于当前PHP运行环境的唯一哈希值自动创建的,哈希计算因子包含PHP版本号、PHP二进制编译标识、运行PHP进程的系统用户、OPcache加载的扩展列表、核心配置哈希、进程沙箱标识。只要任意一个计算因子发生变化(比如PHP版本更新、FPM重启后沙箱ID重算、主机安全策略修改了进程权限标识、不同PHP进程池共用同一个缓存目录),OPcache就会生成全新的哈希命名目录存放缓存,不会复用历史目录。

  • OPcache本身没有内置旧缓存目录的自动回收逻辑:它只会读写和当前运行进程哈希匹配的目录,历史生成的旧目录会永久留在磁盘上,不会被自动覆盖或删除,长期运行后就会出现多个结构、内容完全一致的重复目录。
  • 你当前配置中opcache.file_cache_only=1会强制所有OPcache缓存全量写入磁盘,会进一步放大重复目录占用文件inode的问题;加上opcache.revalidate_path=0在存在目录别名、符号链接的路径解析场景下,也可能额外触发新缓存目录生成。
清理方案与自动维护方法

OPcache没有提供旧缓存目录自动清理的相关配置项,所有非当前进程正在使用的旧缓存目录都可以安全删除,不会影响线上业务正常运行。

单次手动清理操作

  1. 先确认当前活跃的缓存目录:
    • 方法1:上传包含<?php phpinfo();的临时文件到站点访问,找到OPcache板块的File Cache ID项,对应哈希值命名的目录就是当前正在写入使用的目录,其余一级子目录均为可删除的旧缓存。
    • 方法2(无phpinfo权限时):通过主机面板重载对应版本的PHP服务(无需硬重启),等待2-3分钟让站点正常访问生成新缓存,此时.opcache目录下修改时间最新的一级子文件夹就是当前活跃目录。
  2. 确认活跃目录后,删除其余所有旧的一级子文件夹即可。注意不要修改、删除当前活跃目录内的任何文件,否则会引发PHP运行报错。
    如果有SSH操作权限,可以执行以下命令批量清理,执行前请先确认缓存路径填写正确:
    # 进入OPcache文件缓存根目录
    cd /mywebsitepath/.opcache
    # 先执行预览命令,确认列出的待删除目录均为旧缓存,没有包含当前活跃目录
    find . -maxdepth 1 -type d -mmin +10 ! -name '.' -ls
    # 预览确认无误后执行删除,清理10分钟前修改的非活跃缓存目录
    find . -maxdepth 1 -type d -mmin +10 ! -name '.' -exec rm -rf {} \;
    

定期自动清理实现

通过系统定时任务(crontab)定期执行清理脚本即可,无需额外安装工具:

  1. 如果有服务器SSH权限,执行crontab -e编辑定时任务;如果是虚拟主机,直接在主机面板的「定时任务」功能中添加对应规则即可。
  2. 添加以下定时规则,每天凌晨2点自动清理超过1天未更新的旧缓存目录,不会触碰正在使用的活跃目录(活跃目录随站点访问会持续更新文件修改时间,不会满足删除条件):
    0 2 * * * cd /mywebsitepath/.opcache && find . -maxdepth 1 -type d -mmin +1440 ! -name '.' -exec rm -rf {} \;
    

配置优化减少重复缓存生成

调整以下OPcache配置,可以降低重复目录生成概率,同时减少缓存文件总数量:

  • 将opcache.revalidate_path设为1,避免路径解析异常导致的重复缓存生成
  • 如果主机允许使用OPcache共享内存,将opcache.file_cache_only设为0,根据主机内存情况适当调大opcache.memory_consumption到64(单位MB),大部分热点缓存会存储在内存中,大幅减少磁盘文件写入量和重复目录生成概率
  • 确保同站点下的所有PHP进程(FPM进程池、定时任务PHP进程)使用相同的运行用户和OPcache配置,避免哈希计算因子不一致生成新的冗余目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:54:08