开启opcache
Opcode???
Opcache 的前生是 Optimizer+ ,它是PHP的官方公司 Zend 开发的一款闭源但可以免费使用的 PHP 优化加速组件。 Optimizer+ 将PHP代码预编译生成的脚本文件 Opcode 缓存在共享内存中供以后反复使用,从而避免了从磁盘读取代码再次编译的时间消耗。同时,它还应用了一些代码优化模式,使得代码执行更快。从而加速PHP的执行。
Optimizer+ 于 2013年3月中旬改名为 Opcache。并且在 PHP License 下开源:https://github.com/zendtech/ZendOptimizerPlus
Opcache的生命周期
正常的php代码的执行过程如下:
1 | request请求(nginx,apache,cli等)-->Zend引擎读取.php文件-->扫描其词典和表达式 -->解析文件-->创建要执行的计算机代码(称为Opcode)-->最后执行Opcode--> response 返回 |
每一次请求PHP脚本都会执行一遍以上步骤,如果PHP源代码没有变化,那么Opcode也不会变化,显然没有必要每次都重行生成Opcode,结合在Web中无所不在的缓存机制,我们可以把Opcode缓存下来,以后直接访问缓存的Opcode岂不是更快,启用Opcode缓存之后的流程图如下所示:
1 | request请求(nginx,apache,cli等)-->Zend引擎读取.php文件-->读取Opcode-->执行Opcode--> response 返回 |
Opcache的安装
php5.5 以后默认安装,需要手动去开启
1 | zend_extension=opcache.so |
重启 fpm 和 nginx
推荐的 php.ini 中 Opcache的配置
1 | opcache.enable=1 |
opcache的配置说明
1 | opcache.enable=1 (default "1") |
验证opcache是否生效
先把检查时间设置为10秒,也就是说10秒内,不会去检查文件是否有更新,直接用缓存中的opcode
1 | zend_extension=opcache.so |
把opcache.validate_timestamps=0设置为0,则表示,永远不去检查文件是否更新。
重置缓存
var_dump(opcache_reset()); //bool(true)
重置所有的opcache缓存。
opcache图形化管理工具
https://github.com/rlerdorf/opcache-status
HugePage
参考博客: http://www.laruence.com/2015/10/02/3069.html
1 | opcache.huge_code_pages=1 |
Opcache file cache
1 | opcache.file_cache=/tmp |