Opcache 简介
PHP 解释器执行 PHP 脚本会先将脚本内容转换成 opcode,然后再执行字节码。但这样有一个问题,每次都这样,浪费很多资源。解决办法很简单,就是把字节码缓存起来。目前,对于 PHP 5.5 以上的版本,推荐使用 Opcache。旧版本可以考虑:APC、XCache
Opcache 官网介绍: OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销。
安装 Opcache
如何安装请看这里:PHP - Opcache Installing
简单的说,对于 PHP 5.5.0+ 的版本,在编译的时候加上 --enable-opcache 这个参数,并在 php.ini 中添加zend_extension=/full/path/to/opcache.so
启用 Opcache 即可。
配置 Opcache
- 在网站根目录新建一个 phpinfo.php 的文件,内容为:
<?php
echo phpinfo();
- 使用浏览器访问该文件,比如:
http://hostname.com/phpinfo.php
- 找到这一行:Loaded Configuration File /path/to/php.ini
- 编辑上面那个 php.ini 文件,修改内容为:
[opcache]
; OPcache 的共享内存大小,单位:MB
opcache.memory_consumption=64
; 用来存储临时字符串的内存大小,单位:MB
opcache.interned_strings_buffer=16
; OPcache 哈希表中可存储的脚本文件数量上限
opcache.max_accelerated_files=4000
opcache.fast_shutdown=1
; 注意,这里我将 validate_timestamps 设置为 0,Opcache 不会自动更新你的脚本
; 如果你需要了脚本文件,需要手动重启 Web 服务器 或者使用 opcache_reset() 函数
opcache.validate_timestamps=0
; 同样的,还是在上面的网页中找到 extension_dir 这个配置项,然后把你自己的 opcache.so 的路径写进去即可。
zend_extension=/path/to/opcache.so
- 重启 php
# 如果服务器是 Nginx
$ /etc/init.d/php-fpm restart
# 如果服务器是 Apache,直接重启 Apache 即可
$ /etc/init.d/apache restart
- 最后,重新打开上面的地址。如果能看到下面的内容,则说明成功。
reset Opcache
- 如果使用的服务器是 Apache
$ service httpd reload
$ apachectl graceful
- 如果是 PHP-FPM(一般 Nginx 会采用这种方式)
$ service php-fpm reload
注意:如果你的代码修改了,但是访问网站后发现无效。这个时候就要怀疑是不是缓存的问题了。
相关资料
PHP - Opcache Installing PHP - Opcache 运行时配置 使用 OpCache 提升 PHP 5.5+ 程序性能 opcache.fast_shutdown=1导致cphalcon莫名其妙的的错误 深入理解PHP原理之Opcodes PHP 之道 - 缓存