做 PHP 开发的朋友都知道,项目访问量一上来,页面加载慢、接口响应延迟、服务器 CPU 占用高是常事。很多人第一反应是加服务器、优化 SQL、上 Redis,但往往忽略了 PHP 自身最核心的性能加速器 ——OPcache

OPcache 是 PHP 官方自带的字节码缓存引擎,不用额外安装扩展,开启并正确配置后,能直接让 PHP 脚本执行速度提升 50%~200%,CPU 占用大幅下降。可惜的是,90% 的开发者只是默认开启,根本没有真正优化过配置,白白浪费性能。

今天这篇文章,我就带大家彻底搞懂 OPcache,从原理到生产环境实战配置,让你的 PHP 项目真正跑起来。

一、什么是 OPcache?为什么它能让 PHP 变快?

很多新手不理解:PHP 不是直接运行脚本吗?为什么需要 OPcache?

其实 PHP 执行代码要经过四个步骤:读取代码 → 解析 → 编译成字节码 → 执行

每次用户请求,PHP 都会重复这个流程。哪怕代码一行没改,也要重新解析、重新编译。高并发下,这种重复操作极大浪费 CPU 资源。

OPcache 的作用就是:把编译好的字节码直接缓存到内存,下次请求不再重复编译,直接从内存读取字节码并执行。

相当于:

  • 未开启 OPcache:每次都 “重新做饭”
  • 开启 OPcache:做好一次 “放冰箱”,吃的时候直接热一下

省去最耗性能的编译步骤,速度自然翻倍。

二、OPcache 开启方法(新手也能看懂)

OPcache 从 PHP 5.5 开始内置,PHP 7 + 默认集成。

开启非常简单:

  1. 找到 php.ini 文件
  2. 搜索 opcache,确保以下配置开启:
opcache.enable=1
opcache.enable_cli=1
  1. 重启 PHP 服务即可生效。

但开启只是第一步,默认配置性能很弱,想要速度起飞,必须进行生产级调优。

三、最关键的 OPcache 配置项详解(生产环境直接用)

下面这些参数,是我多年线上项目调优总结出来的最优配置,每个参数都讲清楚作用,你直接复制到 php.ini 就能用。

1、opcache.memory_consumption

设置 OPcache 内存大小,单位:MB。

建议值:128 ~ 512

框架项目(Laravel、ThinkPHP)建议:256

内存越大,能缓存的脚本越多,命中率越高。

2、opcache.interned_strings_buffer

字符串驻留内存,减少重复字符串内存占用。

建议值:16 ~ 64

大型项目设为 32 或 64 效果最好。

3、opcache.max_accelerated_files

最大可缓存的 PHP 文件数量。

框架项目文件非常多,建议设大一点:

建议值:100000

不用担心浪费,这只是上限,不是实际占用。

4、opcache.validate_timestamps

是否检查 PHP 文件是否更新。

  • 开发环境:设为 1(修改代码立即生效)
  • 生产环境:设为 0(关闭检查,速度最快)

生产环境一定要关闭,否则会不断检查文件更新,影响性能。

5、opcache.revalidate_freq

文件检查频率,默认 2 秒。

生产环境关闭 validate_timestamps 后,此项无效。

6、opcache.fast_shutdown

快速关闭机制,让 PHP 释放内存更快。

建议:1(开启)

7、opcache.save_comments

是否保留代码注释、注解。

如果你用 Laravel、ThinkPHP 等依赖注解的框架,必须设为 1。 纯原生项目可以设为 0,节省内存。

8、opcache.huge_code_pages

开启大内存页,提升 CPU 缓存命中率,高并发下提升明显。

Linux 系统建议开启:1

四、生产环境最终推荐配置(直接复制使用)

下面这套配置是我目前线上项目稳定运行的高性能 OPcache 方案,适合 99% 的 PHP 项目:

[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=100000
opcache.validate_timestamps=0
opcache.revalidate_freq=0
opcache.fast_shutdown=1
opcache.save_comments=1
opcache.optimization_level=0x7FFFBFFF
opcache.dups_fix=1

配置完成后重启 PHP,你会明显感觉到:

  • 接口响应更快
  • CPU 负载下降
  • 高并发下更稳定
  • 服务器能支撑更多请求

五、OPcache 如何查看状态?是否真正生效?

配置完后,你可以用一个 PHP 文件查看 OPcache 运行状态,判断是否生效。

创建 opcache.php:

<?php
opcache_reset();
echo "<pre>";
print_r(opcache_get_status());
?>

访问后重点看三个指标:

  • opcache_enabled:true(已开启)
  • cache_full:false(缓存未满)
  • hit_rate:命中率(越高越好,生产环境应 > 90%)

命中率越高,说明 OPcache 发挥越稳定。

六、生产环境注意事项(非常重要)

1、生产环境关闭 opcache.validate_timestamps 后,修改 PHP 代码不会立即生效,需要重启 PHP 或执行 opcache_reset () 刷新。

2、内存不要设置太小,否则缓存会被占满,命中率下降。

3、OPcache 不是缓存,不能替代 Redis,它只负责加速 PHP 脚本执行。

4、OPcache 是 PHP 性能提升成本最低、效果最明显的方案,没有之一。

七、总结

很多 PHP 项目性能差,不是代码烂,不是服务器差,而是没把 OPcache 配置好

OPcache 是 PHP 官方提供的免费性能神器,开启并正确调优后,能让你的项目速度直接翻倍。

不要再只默认开启了,用上本文的生产环境配置,你的网站、接口、系统都会明显变快。

如果你是 PHP 开发者,这篇文章建议收藏,无论是新项目部署还是老项目优化,都能直接用。

想进一步提升 PHP 性能?我后面还会分享:

  • PHP 性能调优的冷门技巧
  • 高并发 API 优化方案
  • Laravel / ThinkPHP 专属优化

关注我,带你真正把 PHP 性能玩明白。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐