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

除OPcache外,哪些情况需重启PHP-FPM才能生效代码变更?

OPcache代码变更不生效的排查配置

你的当前OPcache配置:

; When disabled, you must reset the OPcache manually or restart the
; webserver for changes to the filesystem to take effect.
opcache.validate_timestamps=1

; How often (in seconds) to check file timestamps for changes to the shared
; memory storage allocation. ("1" means validate once per second, but only
; once per request. "0" means always validate)
opcache.revalidate_freq=0

以下是需要排查的关键配置及可能的问题:

  • opcache.enable:确认该值设为1。如果是0,OPcache完全未启用,若之前有残留缓存(比如之前开启过OPcache),就会导致代码变更不生效。
  • opcache.revalidate_path:如果代码使用了符号链接(比如部署时用软链切换版本),必须将该值设为1。否则OPcache只会检查软链本身的时间戳,不会追踪软链指向的实际文件的变更。
  • opcache.file_cache_only:检查该值是否为0。如果设为1,OPcache会完全依赖文件系统缓存而非内存缓存,此时validate_timestamps的配置可能无法触发缓存更新,必须重启PHP-FPM才能清除文件缓存。
  • opcache.validate_permission:若该值设为1,OPcache会额外验证文件的权限和所有权。如果文件内容变更但权限/所有权未变,可能会跳过重新验证;反之如果权限配置异常,也会导致缓存无法更新。可尝试临时设为0测试是否生效。
  • opcache.max_accelerated_files:如果项目文件总数超过该配置值,部分文件可能无法被OPcache纳入管理,或缓存替换机制出现异常,导致变更无法被检测到。确保该值大于实际文件数量(可通过find . -type f -name "*.php" | wc -l统计)。
  • opcache.blacklist_filename:检查是否有变更的PHP文件被加入了黑名单。黑名单内的文件不会被OPcache缓存,但如果之前已缓存该文件,黑名单配置不会自动清除旧缓存,需手动重置或重启FPM。
  • PHP-FPM进程生命周期配置:查看pm.max_requests,如果该值过大,PHP-FPM worker进程长时间不重启,可能存在OPcache缓存未被正确回收的情况。可临时调小该值(比如设为100),观察进程自动重启后是否能读取到新代码。
  • 文件系统时间戳同步:如果代码部署在NFS等网络挂载的文件系统上,可能存在文件mtime(修改时间)更新不及时的问题。直接在服务器上用ls -l查看变更文件的时间戳,确认是否和实际修改时间一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:52:21