手机版

PHP7如何打开Opcode来创建强大的性能

时间:2021-08-31 来源:互联网 编辑:宝哥软件园 浏览:

前言

鸟哥在博客中说,提升PHP 7性能的第一个小技巧是打开opcache:

记得启用Zend Opcache,因为PHP7即使没有启用也比PHP-5.6快,所以有些人在之前的测试期间没有启用Opcache。

那么什么是Opcache呢?

Opcache的前身是Optimizer,这是一个封闭源码但免费的PHP优化加速组件,由官方PHP公司Zend开发。Optimizer将PHP代码预编译生成的脚本文件Opcode缓存在共享内存中,以备将来重复使用,从而避免了从磁盘读取代码和重新编译的时间消耗。同时,它还应用了一些代码优化模式,使代码执行得更快。从而加速PHP的执行。

PHP的正常执行过程如下

请求请求(nginx、apache、cli等))- Zend引擎读取。php文件-扫描字典和表达式-解析文件-创建要执行的计算机代码(称为操作码)-最后执行操作码-返回响应

每次请求一个PHP脚本时,都会再次执行上述步骤。如果PHP源代码没有改变,那么操作码也不会改变。显然,没有必要每次都重新生成操作码。结合Web中无处不在的缓存机制,我们可以缓存Opcode。将来直接访问缓存的操作码不是更快吗?启用操作码缓存后的流程图如下:

操作码缓存的目的是避免重复编译,减少CPU和内存开销。

以下描述了Opcache的安装

安装:

1.找到opcache的扩展。我的是php7.1

Yum列表php71*2,安装扩展

yum install php71w-op cache . x86 _ 64配置:

Zend _ extension=op cache . so[op cache];open OPC ache . enable=1

;在CLI环境下,PHP启用OPcacheopcache.enable_cli=1

;mbopcache中的OPcache共享内存存储大小。内存消耗=128

;PHP使用一种称为字符串内插的技术来提高性能。例如,如果在代码中使用字符串“foobar”1000次,那么在PHP中第一次使用字符串时,只会分配一个不可变的内存区域来存储该字符串,其他999次使用都会直接指向这个内存区域。此选项会将此功能提升到更高的级别。默认情况下,这个不可变的内存区域只存在于单个php-fpm进程中。如果设置了此选项,它将在所有php-fpm进程之间共享。在相对较大的应用程序中,这可以有效地节省内存并提高应用程序性能。该选项的值以兆字节为单位。如果设置为16,则表示16MB,默认值为4mbopcache。交错_字符串_缓冲=8

;此选项用于控制内存中可以缓存的最大PHP文件数。该选项必须设置得足够大,以大于项目中所有PHP文件的总和。设定值范围的最小值为200,最大值为PHP 5.5.6之前的100000,PHP 5.5.6之后的1000000。也就是说,在200到100万之间。op cache . max _ accelerated _ files=4000

;设置缓存的过期时间(秒)。如果为0,请检查opcache。每次renew _ freq=60

;字面意思是“允许更快的关闭”。它的作用是提供一种更快的机制,在单个请求结束时调用代码中的析构函数,从而加快PHP的响应速度和PHP进程资源的恢复速度,使应用程序能够更快地响应下一个请求。将其设置为1以使用此机制。opcache.fast_shutdown=1

;如果启用(设置为1),OPcache将检查由opcache设置的文件时间戳(以秒为单位)。renew _ freq检查脚本是否更新。如果此选项被禁用(设置为0),opcache。renew _ freq将被忽略,PHP文件将永远不会被检查。这意味着如果你修改你的代码,然后更新到服务器,然后在浏览器中请求更新后的代码对应的功能,你就看不到更新效果了。强烈建议您在生产环境中将其设置为0,然后在更新代码后顺利重启PHP和web服务器。opcache.validate _时间戳=0

;打开OpCache文件缓存(实验性)。通过打开这个,我们可以让Opcache将Opcode缓存到外部文件中,这显然会提高一些脚本的性能。然后PHP会在/tmp目录中缓存一些操作码的二进制导出文件,这些文件可以跨PHP生命周期存在。opcache.file_cache=/tmp

要查看phpinfo:

测试结果:

同样的接口已经从几百毫秒升级到现在的50毫秒左右

摘要

以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。

版权声明:PHP7如何打开Opcode来创建强大的性能是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。