使用OPCache加速PHP字节码翻译

之前讲APCu的时候,提到过,OpCache是Zend专门为OpCode而提供的缓存插件,可以加速从源文件到字节码的生成过程。

安装OPCache

据说此模块已经默认继承了,我也忘记我是自己编译的还是之前就有的,反正等我想用的时候,发现opcache.so已经存在extensions目录了。

但是php.ini默认是没有加载此模块的,需要添加配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
zend_extension = opcache.so
[opcache]
opcache.enable=1
;opcache.enable_cli=0
; 总Cache size MB大小
opcache.memory_consumption=256
; strings 占用的MB大小
opcache.interned_strings_buffer=32
; 最大用多少文件句柄
opcache.max_accelerated_files=20000
opcache.validate_timestamps=1
; Cache ttl 60s
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_file_override=1

我之前安装了xdebug, apcu,有一种说法是,xdebug如果同opcache同时加载,opcache需要放在xdebug之前,将所有配置section部分append到一个名为model.config的文件,然后用几行命令来自动添加:

1
2
3
cat $phproot/lib/php.ini | sed -e '/[oO][pP]cache/d' -e '/[xX][dD]ebug/d' | sed -e '/Dynamic Extensions/{n;/^;;;;;;;;;;;;;;;/{a\ \nzend_extension = xdebug.so\nzend_extension = opcache.so\nextension = apcu.so' -e '}}' | sed -e '/Module Settings/{n;/^;;;;;;;;;;;;;;;/{r model.config' -e '}}' > modify.ini
mv -f modify.ini $phproot/lib/php.ini
psp -k httpd

上述脚本主要是先删除opcache和xdebug相关配置,然后匹配Dynamic Extensions,插入so加载选项,再匹配Module Settings,加入插件配置信息。
此时,你的phpinfo()里面,应该已经有了opcache的信息。

效果展示

下载 https://github.com/rlerdorf/opcache-status 放入 Apache DocumentRoot下,即可前端访问,如下是缓存页面大小和hti次数展示:
view1

如下是缓存页面的另外一种视图:
view2

下载 model.config