opcache php 原理_opcache php性能提升用法小结

简介

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

工作原理

PHP执行代码会经过如下4个步骤(zend)

input(PHP代码)->词法分析 ->语法分析 ->opcode ->Zend engine- >output

增加opcache之后,会变成以下步骤:

安装

PHP 5.5+以后内建了opcache,编译安装的时候--enable-opcache 就可以了。

其它版本需要下载和编译

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

增加以下代码到php.ini文件中

[opcache]

zend_extension=opcache.so

重启 php

service php-fpm restart

opcache安装成功

使用

配置参数

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缓存字节码。

if (extension_loaded('Zend OPcache')) {

var_dump(opcache_reset());

}

图形界面展示

扩展阅读

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值