1.文档阅读 <<现代PHP模式>> -- 第33page 关于Zend OPcache PHP: OPcache - Manual PHP - APC/OPcache - 学习/实践_php apc-CSDN博客 AI问答 2.整理输出 OPcache 字节码缓存简介 OPcache 是 PHP 的官方字节码缓存扩展,通过将 PHP 脚本预编译为字节码并存储在共享内存中,减少重复编译的开销,显著提升 PHP 应用的执行效率。它从 PHP 5.5 开始内置,是优化 PHP 性能的关键工具。 OPcache 的工作原理 PHP 脚本在运行时会被解析为字节码(Opcode),再由 Zend 引擎执行。 OPcache 将编译后的字节码缓存到共享内存中,后续请求直接使用缓存的字节码,跳过重复的解析和编译阶段。 - 缓存存储:字节码存储在共享内存中,避免每次请求重新加载。
- 缓存更新:脚本文件修改后,OPcache 会检测并重新编译更新后的文件。
- 内存优化:通过共享内存减少进程间的内存占用。
安装与启用 OPcache OPcache 通常随 PHP 一起安装,但可能需要手动启用。 在 Linux 系统中安装 # 基于 Debian/Ubuntu
sudo apt-get install php-opcache# 基于 CentOS/RHEL
sudo yum install php-opcache
在 php.ini 中启用 zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1 # 可选,启用 CLI 模式的缓存
关键配置参数 OPcache 的行为通过 php.ini 中的参数调整,以下是一些常用配置: 基本配置 opcache.memory_consumption=128 # 共享内存大小(MB)
opcache.interned_strings_buffer=8 # 字符串缓存大小(MB)
opcache.max_accelerated_files=10000 # 最大缓存文件数
优化配置 opcache.validate_timestamps=1 # 是否检查文件更新(开发环境建议开启)
opcache.revalidate_freq=2 # 检查更新的频率(秒)
opcache.save_comments=1 # 保留注释(某些框架依赖注释)
opcache.fast_shutdown=1 # 快速关闭机制
生产环境推荐配置 opcache.validate_timestamps=0 # 关闭检查以提高性能
opcache.enable_file_override=1 # 允许覆盖函数
监控 OPcache 状态 通过 opcache_get_status() 函数或命令行工具查看缓存状态。 PHP 代码查看状态 <?php
print_r(opcache_get_status());
?>
命令行查看状态 php -r "print_r(opcache_get_status());"
关键指标 - memory_usage:内存使用情况。
- opcache_hit_rate:缓存命中率(理想值接近 100%)。
- cached_scripts:已缓存的脚本数量。
OPcache 的性能优化建议 -
分配足够内存 opcache.memory_consumption 应根据项目大小设置,避免因内存不足导致缓存失效。 -
调整缓存文件数量 opcache.max_accelerated_files 应大于项目文件数,默认值可能不足。 -
生产环境禁用时间戳验证 设置 opcache.validate_timestamps=0 ,通过手动重置缓存更新代码。 -
定期重启 PHP-FPM 避免长时间运行后内存碎片化,可通过 Cron 任务定时重启。 -
结合 Composer 优化 使用 composer dump-autoload -o 生成优化类加载映射,减少文件查找开销。 手动重置 OPcache 在生产环境中,更新代码后可能需要手动重置缓存。 -------------- 可以解决代码更新过程中的报错,如类常量,方法未定义,找不到的报错; 通过 PHP 函数重置 <?php
opcache_reset();
?>
通过命令行重置 php -r "opcache_reset();"
通过 Web 请求触发 curl http://localhost/opcache-reset.php
常见问题与解决方案 缓存未生效 - 检查
php.ini 中 OPcache 是否启用。 - 确认
opcache.enable=1 且无语法错误。 内存不足 - 增加
opcache.memory_consumption 并监控命中率。 - 减少缓存文件数或优化项目代码。
文件更新未检测到 - 开发环境设置
opcache.validate_timestamps=1 。 - 生产环境手动重置缓存或部署时重启 PHP 服务。
与其他优化工具结合 -
APCu 缓存用户数据,与 OPcache 互补(APCu 缓存数据,OPcache 缓存字节码)。 -
Redis/Memcached 缓存数据库查询结果,减少重复计算。 -
CDN 和前端缓存 减少 PHP 动态请求压力。 通过合理配置 OPcache,PHP 应用的性能可以得到显著提升,尤其是在高并发场景下。建议根据实际业务需求调整参数,并定期监控缓存状态以保持最佳性能。 3. 实践部分 环境 Mac Pro homebrew 安装PHP 2.1 用处,优缺点 OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销。 PHP 5.5.0 及后续版本中已经绑定了 OPcache 扩展。 对于 PHP 5.2,5.3 和 5.4 版本可以使用 » PECL扩展中的 OPcache 库。 -- 官方原话 2.2 查看OPcache是否开启 方式一:浏览器直接访问输出 phpinfo();  方式二:通过命令查看 ➜ conf.d php -m | grep OPcache Zend OPcache Zend OPcache ➜ conf.d  2.3 查看扩展配置文件 ➜ php-test-temp php-config --ini-dir /usr/local/etc/php/8.1/conf.d ➜ php-test-temp cd /usr/local/etc/php/8.1/conf.d ➜ conf.d ls ext-opcache.ini ➜ conf.d cat ext-opcache.ini [opcache] zend_extension="/usr/local/opt/php/lib/php/20210902/opcache.so" ➜ conf.d 后续补充 ... |