菜鸟笔记
提升您的技术认知

opcache 字节码缓存提升wordpress php执行效率-ag真人官方网

opcache 是什么?

opcache 是 php 的官方推出的字节码缓存器(zend opcache),通过将 php 脚本预编译的字节码存储在共享内存中来提升 php 的性能,在 php 5.5.0 及后续版本中已经绑定了 opcache 扩展, 

缓存预编译字节码的好处就是避免重复解析和编译脚本,省去了每次加载和解析 php 脚本的开销,那么这一过程是如何实现的呢?

缓存字节码:php 脚本首次被执行的时候,zend 引擎会将代码转换为 抽象语法树(ast),再编译为 字节码(opcodes),opcache 扩展会拦截这一过程,将字节码存储在共享内存中,后续请求直接调用内存中的字节码,跳过重复编译的过程。

内存共享机制:opcache 使用共享内存(mmap 或 shm)存储字节码,所有 php 进程(如 php-fpm 子进程)共享同一份缓存,降低了内存的占用,相比其他方案,opcache 与 php 内核深度集成,效率更高。

所以 opcache 在下面几个关键点提升了性能:

cpu 节省:避免重复编译,降低 cpu 负载(尤其是 wordpress 这类动态脚本)。

i/o 优化:减少磁盘读取 .php 文件的次数(对机械硬盘效果显著)。

内存效率:字节码比原始 php 代码更紧凑,共享内存减少整体内存占用。

所以对于 wordpress 来说,就特别需要 opcache 了,因为 wordpress 每个页面请求都会加载大量 php 文件(主题、插件、核心),这样未优化的 wordpress 在流量高峰时容易因 php 编译拖慢响应。

如何启用 opcache?

php php 5.5.0 及后续版本默认包含 opcache,opcache 只能编译为共享扩展,如果你使用 –disable-all 参数 禁用了默认扩展的构建, 那么必须使用 –enable-opcache 选项来开启 opcache。

编译之后,就可以使用 zend_extension 指令来将 opcache 扩展加载到 php 中。在非 windows 平台使用 zend_extension=/full/path/to/opcache.so, windows 平台使用 zend_extension=c:\path\to\php_opcache.dll。

汇总一下在 php.ini 中添加下面代码:

zend_extension=opcache.so ;
linuxzend_extension=opcache.dll ;
windowsopcache.enable=1

针对 wordpress,可以加入这些专属优化配置:

[opcache]
opcache.enable=1
opcache.memory_consumption=256 ; wordpress 建议 ≥128mb
opcache.max_accelerated_files=10000 ; 覆盖 wordpress 核心   插件文件数
opcache.interned_strings_buffer=16  ; wordpress 大量重复字符串(如钩子名)
opcache.validate_timestamps=0       ; 生产环境关闭自动检查
opcache.revalidate_freq=0           ; 与 validate_timestamps=0 配合
opcache.save_comments=1             ; wordpress 依赖注释(如钩子文档)
opcache.enable_file_override=1      ; 覆盖 include/require 优化

安装好时候,如何检测验证安装成功了呢?

简单可以通过通过 phpinfo() 或命令行 php -v 查看是否加载。也可以在后台 「wpjam」主菜单下「系统信息」子菜单中的「服务器」标签中「php 扩展」看到:opcache:

当然最重要是「opcache」标签页:

这里也会罗列出 opcache 的一些状态,比如已用内存和剩余内存,以及他们之间百分率,命中率和未命中率,以及他们之间百分率等等数据,还有相关的饼图。

生产环境一般建议关闭 validate_timestamps,避免频繁检查文件修改,文件有更新的时候通过手动重启 opcache 或 php-fpm 来更新代码,也可以在上图中点击「刷新缓存」即可。

下面是一个简单 wordpress 站点在开启 opcache 前后的性能对比:

场景 未启用 opcache 启用 opcache 优化幅度
ag真人官方网首页加载时间 800ms 300ms ↓62.5%
后台管理页面 1200ms 500ms ↓58.3%
并发请求(100 qps) cpu 90% cpu 45 %↓50%

所以可以看到启用 opcache 最高接近 300% 的提升。

php 代码使用 opcache 之后,可以提高代码的执行效率,特别是 wordpress 这类文件比较多的 cms 系统。

网站地图