PHP中的opcache

PHP中的opcache是什么,opcache是用来干嘛的?

分析一下执行过程:

  1. php初始化执行环节,启动Zend引擎,加载注册的扩展模块
  2. 初始化后读取脚本文件,Zend引擎对脚本文件进行词法分析(lex),语法分析(bison),生成语法树
  3. Zend 引擎编译语法树,生成opcode
  4. Zend 引擎执行opcode,返回执行结果

在PHP cli模式下,每次执行PHP脚本,四个步骤都会依次执行一遍;

在PHP-FPM模式下,步骤1)在PHP-FPM启动时执行一次,后续的请求中不再执行;步骤2)~4)每个请求都要执行一遍;

其实步骤2)、3)生成的语法树和opcode,同一个PHP脚本每次运行的结果都是一样的,

在PHP-FPM模式下,每次请求都要处理一遍,是对系统资源极大的浪费,那么有没有办法优化呢?

opcache

OPCache 是官方的Opcode 缓存解决方案,在PHP5.5版本之后,已经打包到PHP源码中一起发布。

它将PHP编译产生的字节码以及数据缓存到共享内存中, 在每次请求,从缓存中直接读取编译后的opcode,进行执行。

通过节省脚本的编译过程,提高PHP的运行效率。

缓存两类内容:

  • OPCode
  • Interned String,如注释、变量名等

开启和配置apcache扩展

php.ini文件opcache参数:

配置php.ini
[Zend Opcache]
zend_extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/opcache.so
opcache.enable=1 ;启用操作码缓存
opcache.enable_cli=1 ;仅针对CLI环境启用操作码缓存
opcache.memory_consumption=128 ;共享内存大小,单位MB
opcache.interned_strings_buffer=8 ;存储临时字符串的内存大小,单位MB
opcache.max_accelerated_files=4000 ;哈希表中可存储的脚本文件数量上限
;opcache.max_wasted_percentage=5 ;浪费内存的上限,以百分比计
;opcache.use_cwd=1;附加改脚本的工作目录,避免同名脚本冲突
opcache.validate_timestamps=1 ;每隔revalidate_freq 设定的秒数 检查脚本是否更新
opcache.revalidate_freq=60 ;
;opcache.revalidate_path=0 ;如果禁用此选项,在同一个 include_path 已存在的缓存文件会被重用
;opcache.save_comments=1 ;禁用后将也不会加载注释内容
opcache.fast_shutdown=1 ;一次释放全部请求变量的内存
opcache.enable_file_override=0 ; 如果启用,则在调用函数file_exists(), is_file() 以及 is_readable() 的时候, 都会检查操作码缓存
;opcache.optimization_level=0xffffffff ;控制优化级别的二进制位掩码。
;opcache.inherited_hack=1 ;PHP 5.3之前做的优化
;opcache.dups_fix=0 ;仅作为针对 “不可重定义类”错误的一种解决方案。
;opcache.blacklist_filename="" ;黑名单文件为文本文件,包含了不进行预编译优化的文件名
;opcache.max_file_size=0 ;以字节为单位的缓存的文件大小上限
;opcache.consistency_checks=0 ;如果是非 0 值,OPcache 将会每隔 N 次请求检查缓存校验和
opcache.force_restart_timeout=180 ; 如果缓存处于非激活状态,等待多少秒之后计划重启。
;opcache.error_log="" ;OPcache模块的错误日志文件
;opcache.log_verbosity_level=1 ;OPcache模块的日志级别。致命(0)错误(1) 警告(2)信息(3)调试(4)
;opcache.preferred_memory_model="" ;OPcache 首选的内存模块。可选值包括: mmap,shm, posix 以及 win32。
;opcache.protect_memory=0 ;保护共享内存,以避免执行脚本时发生非预期的写入。 仅用于内部调试。
;opcache.mmap_base=null ;在Windows 平台上共享内存段的基地址

注意事项

1、不建议Xcache和Opcache同时启用PHP优化;

因为PHP 5.5.0及后续版本已经内嵌对Opcache的支持,所以PHP意识到其重要性,相对于Xcache等第三方的PHP优化器来说,使用Opcache会是更好的选择。另外,两者同时存在的话,会使Opcache的缓存命中数大大降低,而且增加不必要的开销。

2、不建议在开发过程中开启Opcache

原因很明显,开启了Opcache之后,开发人员修改的内容不会立即显示和生效,因为受到opcache.revalidate_freq=60的影响,所以建议在开发并测试之后,测试性能时再行打开测试,当然,生产环境一直都要开着Opcache了哦。

3、不建议将Opcache指标设置太大

Opcache各项指标配置大小或是否开启,需要结合项目实际情况需求及Opcache官方建议的配置,项目的实际情况分析,可结合上面第四部分的可视化缓存信息分析调整。

4、不建议长期使用老版本的Opcache

建议及时关注Opcache官网动态,实时了解其的bugs修复,功能优化及新增功能,以便更好的将其应用在自己的项目中。

Opcache GUI工具

查看和分析当前的Opcache加速效果,使用Github上开源的项目:https://github/rlerdorf/opcache-status

将下载下来的项目放入到当前的Web服务器根目录下,直接访问即可,先看效果:

从上面的截图及项目文件看出,该Opcache工具是一个简化的GUI版本,使用它可以清楚了解和分析下面的内容:

1、缓存使用情况、剩余情况及内存浪费情况及比例;

2、缓存的keys、剩余的keys数;

3、缓存命中数以及未命中数;

4、缓存配置、状态以及缓存捕获脚本;

5、缓存的脚本文件,以视图形式划分直观显示;

Screenshot

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要在PHP 7.3上安装opcache,请按照以下步骤操作: 1. 打开终端并运行以下命令以安装opcache: ``` sudo apt-get update sudo apt-get install php7.3-opcache ``` 2. 重启Apache或Nginx服务器: 对于Apache服务器,请运行以下命令: ``` sudo service apache2 restart ``` 对于Nginx服务器,请运行以下命令: ``` sudo service nginx restart ``` 3. 确认opcache已启用。您可以通过运行以下命令来检查: ``` php -i | grep opcache ``` 如果opcache已启用,则应该看到一些opcache相关的输出。 4. 配置opcache(可选)。opcache有一些配置选项可用于优化性能。您可以编辑php.ini文件并修改以下选项: ``` opcache.enable=1 opcache.memory_consumption=128 opcache.max_accelerated_files=10000 ``` 请注意,这些选项的默认值可能会因PHP版本和发行版而异。 5. 重启Apache或Nginx服务器以应用配置更改。 ### 回答2: 要安装PHP 7.3版本的opcache,您可以按照以下步骤进行操作: 1. 首先,确保您已经正确安装了PHP 7.3版本。您可以在终端上运行以下命令来检查版本: ``` php -v ``` 2. 接下来,您需要安装opcache扩展。在终端上执行以下命令来安装opcache扩展: ``` sudo apt-get install php7.3-opcache ``` 3. 安装完成后,您需要编辑PHP配置文件以启用opcache。您可以使用以下命令打开PHP配置文件: ``` sudo nano /etc/php/7.3/cli/php.ini ``` 4. 在配置文件找到以下行,并确保它们的值如下: ``` opcache.enable=1 opcache.enable_cli=1 ``` 5. 保存并关闭文件(使用Ctrl + X,然后按Y和Enter键)。 6. 最后,重新启动PHP服务以使更改生效: ``` sudo service php7.3-fpm restart ``` 现在,您应该已经成功安装并启用了PHP 7.3的opcache扩展。您可以通过在终端上运行以下命令来验证opcache是否正常工作: ``` php -i | grep opcache ``` 您应该会看到一系列关于opcache的信息,这表示opcache已成功安装并启用。 请注意,上述步骤适用于Ubuntu操作系统,如果您使用其他操作系统,请相应地修改安装命令和配置文件的位置。 ### 回答3: 安装PHP 7.3的Opcache可以通过以下步骤完成: 1. 确保你的PHP版本是7.3。你可以在终端使用以下命令确认版本:php -v。 2. 在终端输入以下命令安装Opcache扩展: sudo apt-get install php7.3-opcache 3. 安装完成后,需要编辑php.ini文件。在终端输入以下命令打开该文件: sudo nano /etc/php/7.3/cli/php.ini 4. 在php.ini文件,搜索opcache.enable并确保该行没有被注释掉。如果有注释,将其移除或者修改为opcache.enable=1。 5. 同样,搜索opcache.enable_cli并确保该行没有被注释掉。如果有注释,将其移除或者修改为opcache.enable_cli=1。 6. 可以按住Ctrl + X,然后按Y来保存更改。 7. 重启Web服务器以使更改生效。在终端输入以下命令来重启Apache服务器: sudo systemctl restart apache2 8. 此时,Opcache已成功安装并启用在PHP 7.3,你可以通过在代码添加phpinfo()函数来检查Opcache是否已启用。 希望这些步骤对你安装PHP 7.3的Opcache有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值