PHP Opcache缓存刷新后,为何代码重载仍无法更新改写?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1088个文字,预计阅读时间需要5分钟。
问题背景:通过启用Opcache缓存优化,将PHP代码预编译为Opcode缓存,存储到共享内存中,提供进程重复调用,从而减少了重复从磁盘解析PHP代码的时间消耗,显著提高了PHP性能,提升了业务性能的调用。
问题背景
通过启用Opcache的缓存优化,将PHP代码预编译为Opcode缓存到共享内存中供进程反复调用,从而减少了重复从磁盘解析PHP代码的时间消耗,显著的提高了PHP性能,提升了业务性能的调用,但是也引发了一些问题,就是我们每次更新了相应的PHP代码后,web server 无法即时加载到更新后的代码。
解决方案
(一)、设置Opcache脚本验证时间
可以通过更改 Opcache 以下两个配置选项来调整代码重载时间
opcache.revalidate_freq=0 检查脚本时间戳是否有更新的周期,以秒为单位。(如果设置为 0 会导致针对每个请求, OPcache 都会检查脚本更新)
opcache.validate_timestamps=0 如果启用,那么 OPcache 会每隔 opcache.revalidate_freq 设定的秒数 检查脚本是否更新。
PS:在实际生产环境中,为了尽可能达到最优性能,尽量不开启文件更新验证,因为每次验证都会重新预编译PHP代码到共享内存中。
(二)、重启 | 重载 php-fpm 进程
每次重启或重启 php-fpm 进程便会重新解析PHP脚本文件,但是重启 fpm 进程可能会导致请求中断,从而导致写入脏数据 或者 造成事务回滚等一系列异常。
本文共计1088个文字,预计阅读时间需要5分钟。
问题背景:通过启用Opcache缓存优化,将PHP代码预编译为Opcode缓存,存储到共享内存中,提供进程重复调用,从而减少了重复从磁盘解析PHP代码的时间消耗,显著提高了PHP性能,提升了业务性能的调用。
问题背景
通过启用Opcache的缓存优化,将PHP代码预编译为Opcode缓存到共享内存中供进程反复调用,从而减少了重复从磁盘解析PHP代码的时间消耗,显著的提高了PHP性能,提升了业务性能的调用,但是也引发了一些问题,就是我们每次更新了相应的PHP代码后,web server 无法即时加载到更新后的代码。
解决方案
(一)、设置Opcache脚本验证时间
可以通过更改 Opcache 以下两个配置选项来调整代码重载时间
opcache.revalidate_freq=0 检查脚本时间戳是否有更新的周期,以秒为单位。(如果设置为 0 会导致针对每个请求, OPcache 都会检查脚本更新)
opcache.validate_timestamps=0 如果启用,那么 OPcache 会每隔 opcache.revalidate_freq 设定的秒数 检查脚本是否更新。
PS:在实际生产环境中,为了尽可能达到最优性能,尽量不开启文件更新验证,因为每次验证都会重新预编译PHP代码到共享内存中。
(二)、重启 | 重载 php-fpm 进程
每次重启或重启 php-fpm 进程便会重新解析PHP脚本文件,但是重启 fpm 进程可能会导致请求中断,从而导致写入脏数据 或者 造成事务回滚等一系列异常。

