opcache php性能提高用法小结

简介

当解释器完成对脚本代码的分析后,便将它们生成能够直接运行的中间代码,也称为操做码(Operate Code,opcode)。Opcode cache的目地是避免重复编译,减小CPU和内存开销,OPcache 经过将 PHP 脚本预编译的字节码存储到共享内存中来提高 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销。php

工做原理

PHP执行代码会通过以下4个步骤(zend) input(PHP代码)->词法分析 ->语法分析 ->opcode ->Zend engine- >output
php执行步骤
增长opcache以后,会变成如下步骤:
输入图片说明html

安装

PHP 5.5+之后内建了opcache,编译安装的时候--enable-opcache 就能够了。 其它版本须要下载和编译git

  1. 下载
    https://pecl.php.net/package/ZendOpcache 7.0.4.tgz 官网
  2. 编译扩展
wget https://pecl.php.net/get/zendopcache-7.0.4.tgz
 tar xzf zendopcache-7.0.4.tgz
 cd zendopcache-7.0.4
 /usr/local/bin/phpize
 ./configure --with-php-config=/usr/local/bin/php-config
 make && make install
  1. 增长如下代码到php.ini文件中
[opcache] 
zend_extension=opcache.so
  1. 重启 php
service php-fpm restart

输入图片说明
opcache安装成功github

使用

配置参数

opcache.enable=1  #开关 默认打开
opcache.enable_cli=1 #
opcache.validate_timestamps=1     # 默认1 若是置为1,则OPCACHE会自动检测文件的时间戳(检测周期为revalidate_freq),
opcache.memory_consumption=128    # 可用内存 单位M
opcache.revalidate_freq=60        # 多少秒检测下php文件是否变更
opcache.optimization_level=1 
opcache.error_log=/opt/logs/php/php_opcache.log #opcache 错误日志
opcache.log_verbosity_level =1 #将错误信息都导向 Web 服务器日志.默认的只有致命错误(level 0) 或者错误(level 1)才会被记录.
opcache.max_wasted_percentage=5   #“浪费”的内存达到此值对应的百分比,就会发起一个重启调度 
opcache.interned_strings_buffer=8 #interned string的内存大小
opcache.max_accelerated_files=4096 # 文件数量 
opcache.max_file_size=0           #被cache的文件的最大size,单位bytes。0表示不限
opcache.fast_shutdown=1           #打开时可以使php在request shutdown时回收内
opcache.force_restart_timeout=30  #若是opcache处于非active状态,当N秒后opcache将自动重启

能够根据图形展现界面的效果去调整参数.缓存

注意

典型的问题就是因为opcache的缓存加速机制致使的代码变动后没法当即看到效果,因此在开发环境下能够经过设置revalidate_freq时间,或者更新代码后重启php-fpm.
我的以为最好的方式仍是上传更新代码后,自动执行一个脚本,调用opcache_reset()函数重置全部opcache缓存字节码。服务器

<?php
if (extension_loaded('Zend OPcache')) {
  var_dump(opcache_reset());
}

图形界面展现

https://github.com/rlerdorf/opcache-status
https://github.com/PeeHaa/OpCacheGUI函数

扩展阅读

相关文章
相关标签/搜索