使用 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 的安装.
如何查看效果
- 拥有漂亮的图形化界面的项目 : github.com/PeeHaa/OpCacheGUI
- 单文件, 方便部署的项目: github.com/rlerdorf/opcache-status
效果图 
下图是 PHPHub 开启了 OpCache 后的效果 ( New Relic 监控后台截屏 ) :
开启后的 PHP 平均响应时间不到 60ms, 之前是 120 ~ 130ms
大家有没有觉得访问的时候快了一点点呢.
本帖已被设为精华帖!
高认可度评论:
@zhuzhichao
顺便提下有下面这个函数可以调用, 可以写一个 artisan command, 在 envoy 里, 更新代码后调用 Reset Cache.
@zhuzhichao
顺便提下有下面这个函数可以调用, 可以写一个 artisan command, 在 envoy 里, 更新代码后调用 Reset Cache.
@lijinma 哈哈, 用的 New Relic 监控.
@Summer 可以具体说下opcache_reset()的使用吗?
@王东哲 要啥具体的,如果想清理,直接放入口文件,跑一次下就清理了
opcache_reset()在CLI模式下运行,一直返回false,是因为没有开始opcache.enable_cli吗?
php.net 中,有人留言
使用以下脚本 opcache-clear
存放到 /usr/local/bin/opcache-clear ,需要重置的时候执行一下: "opcache-clear"
我配置的opcache出现以下错误,能否帮忙看看
php artisan opcache:optimize
Optimize started, this can take a while... The requested URL returned error: 500 Internal Server Error Url: 127.0.0.1/opcache-api/optimize?key=...