1.应用场景
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 主要用于学习PHP字节码缓存扩展的作用和实现原理,使用场景。 > 本文介绍了PHP官方字节码缓存扩展OPcache的作用与使用方法。OPcache通过将PHP脚本预编译为字节码并存储在共享内存中,显著提升PHP应用性能。主要内容包括:OPcache的工作原理(缓存字节码、共享内存机制)、安装启用方法(Linux系统安装及php.ini配置)、关键配置参数(内存分配、缓存文件数等)、状态监控方式以及性能优化建议。文章还提供了生产环境推荐配置、常见问题解决方案,并强调OPcache与APCu、Redis等工具的互补性。通过合理配置OPcache,可有效降低PHP脚本重复编译开销,特别适合高并发场景。 |
2.学习/操作
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ## 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 系统中安装 bash # 基于 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 <?php print_r(opcache_get_status()); ?>
##### 命令行查看状态 bash php -r "print_r(opcache_get_status());"
##### 关键指标 * memory_usage:内存使用情况。 * opcache_hit_rate:缓存命中率(理想值接近 100%)。 * cached_scripts:已缓存的脚本数量。 *** ** * ** *** #### OPcache 的性能优化建议 1. 分配足够内存 opcache.memory_consumption
应根据项目大小设置,避免因内存不足导致缓存失效。 2. 调整缓存文件数量 opcache.max_accelerated_files
应大于项目文件数,默认值可能不足。 3. 生产环境禁用时间戳验证 设置 opcache.validate_timestamps=0
,通过手动重置缓存更新代码。 4. 定期重启 PHP-FPM 避免长时间运行后内存碎片化,可通过 Cron 任务定时重启。 5. 结合 Composer 优化 使用 composer dump-autoload -o
生成优化类加载映射,减少文件查找开销。 *** ** * ** *** #### 手动重置 OPcache 在生产环境中,更新代码后可能需要手动重置缓存。 -------------- 可以解决代码更新过程中的报错,如类常量,方法未定义,找不到的报错; ##### 通过 PHP 函数重置 php <?php opcache_reset(); ?>
##### 通过命令行重置 php php -r "opcache_reset();"
##### 通过 Web 请求触发 bash curl http://localhost/opcache-reset.php
*** ** * ** *** #### 常见问题与解决方案 ##### 缓存未生效 * 检查 php.ini
中 OPcache 是否启用。 * 确认 opcache.enable=1
且无语法错误。 ##### 内存不足 * 增加 opcache.memory_consumption
并监控命中率。 * 减少缓存文件数或优化项目代码。 ##### 文件更新未检测到 * 开发环境设置 opcache.validate_timestamps=1
。 * 生产环境手动重置缓存或部署时重启 PHP 服务。 *** ** * ** *** #### 与其他优化工具结合 1. APCu 缓存用户数据,与 OPcache 互补(APCu 缓存数据,OPcache 缓存字节码)。 2. Redis/Memcached 缓存数据库查询结果,减少重复计算。 3. 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 后续补充 ... |
3.问题/补充
|-----|
| TBD |
4.参考
|-------------------------------------------------------------------------------------------------------------------------------------------|
| PHP: OPcache - Manual <<现代PHP模式>> -- 第33page 关于Zend OPcache |
后续补充
...