Opcache 缓存预编译的字节码。这比使用 PHP 为每个 HTTP 请求加载和解析每个脚本要快得多。缓存必须足够大,以存储应用程序的 PHP 脚本的编译代码,但不能太大,以至于阻止您将可用的内存用于其他操作。
zend_extension=opcache.so
opcache.enable=1 //启用 opcache
opcache.enable_cli=1 //针对支持 CLI 版本 PHP 启动操作码缓存 一般被用来测试和调试
opcache.memory_consumption=128 //共享内存大小, 这个根据你们的需求可调
opcache.interned_strings_buffer=8 //interned string 的内存大小, 也可调
opcache.max_accelerated_files=4000 //最大缓存的文件数目
opcache.validate_timestamps=1 //启用时间戳验证,配置 opcache.revalidate_freq 使用。设置 0 禁用,则必须手动重置 OPcache 或重新启动才能清除过期缓存
opcache.revalidate_freq=60 //60s 检查一次文件更新
opcache.fast_shutdown=1 //打开快速关闭, 打开这个在 PHP Request Shutdown 的时候,会收内存的速度会提高
opcache.save_comments=0 //不保存文件/函数的注释
常见问题:
1.PHP 文件已更改,opcache 没有失败,无法请求新内容。
原因:Opcache。validate _ stamps 的值为 0,必须手动清理缓存,这适用于生产环境。
以下配置将自动检测文件是否被更改,如果 opcache 被更改,该配置将无效。
opcache.validate_timestamps=1
opcache.revalidate_freq=0
2.手动清理缓存
重启 php-fpm 的进程
opcache_reset()和 opcache_invalidate()
使用命令 opcache_reset() opcache 没有失效
当 PHP 以 PHP-FPM 的方式运行的时候,opcache 的缓存是无法通过 php 命令进行清除的,只能通过 http 或 cgi 到 php-fpm 进程的方式来清除缓存。
4.使用 cachetools 来清理缓存
https://github.com/gordalina/cachetool
结论:
1.本地开发建议关闭 opcache,或者配置 opcache.validate_timestamps=1 和 opcache.validate_timestamps=1
2.测试环境可以配置 opcache.validate_timestamps=1 和 opcache.validate_timestamps=1
3.生产环境,根据发布方式而定:
3.1 切换软链接
opcache.validate_timestamps=1 和 opcache.validate_timestamps=1
3.2 文件覆盖
重启 php-fpm
3.3 提供清理的脚步,发布后清理
3.4 提供清理某个文件的 opcache http 接口,限制访问
转载请注明:汇站网 » PHP7 opcache 缓存清理问题