使用 OpCache 提升 PHP 5.5+ 程序性能

说明

PHP 5.5 以后内建了 OpCache , OpCache 的加速原理是把编译后的 bytecode 存储在内存里面, 避免重复编译 PHP 所造成的资源浪费.

引用

如何启用

虽然内建了, 但是默认没有启用, 下面是开启的布置, 以这套环境为例子:

PHP 5.5
Ubuntu 14.04
Nginx
PHP-FPM

修改 php.ini 文件

sudo vim /etc/php5/fpm/php.ini

在文件最后面加入:

; 开关打开
opcache.enable=1

; 可用内存, 酌情而定, 单位 megabytes
opcache.memory_consumption=256

; 对多缓存文件限制, 命中率不到 100% 的话, 可以试着提高这个值
opcache.max_accelerated_files=5000

; Opcache 会在一定时间内去检查文件的修改时间, 这里设置检查的时间周期, 默认为 2, 定位为秒
opcache.revalidate_freq=240

重启服务器

sudo service php5-fpm restart
sudo service nginx restart

APC VS OpCache

APC 是将要被遗弃的项目, PHP 5.5 都不支持, 而在 PHP 5.5 和 5.6 版本, OpCache 是默认内建的, 并且支持 5.2 到 5.4 的安装.

如何查看效果

效果图 :sparkles:

下图是 PHPHub 开启了 OpCache 后的效果 ( New Relic 监控后台截屏 ) :

file

开启后的 PHP 平均响应时间不到 60ms, 之前是 120 ~ 130ms

file

大家有没有觉得访问的时候快了一点点呢. :smile:


Practice makes perfect.

本帖已被设为精华帖!
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 15
Summer

@zhuzhichao

顺便提下有下面这个函数可以调用, 可以写一个 artisan command, 在 envoy 里, 更新代码后调用 Reset Cache.

opcache_reset(); 
4年前 评论
Summer

@lijinma 哈哈, 用的 New Relic 监控.

4年前 评论
Jourdon

@Summer 可以具体说下opcache_reset()的使用吗?

1年前 评论
丁海军

@王东哲 要啥具体的,如果想清理,直接放入口文件,跑一次下就清理了

1年前 评论

opcache_reset()在CLI模式下运行,一直返回false,是因为没有开始opcache.enable_cli吗?

1年前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
浓缩过后的精华
Laravel Nova 后台管理面板文档的中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会