如何在PHP7中启用opcode打造强大的程序性能
鸟哥在博客中表示,提高PHP 7性能有几个技巧,第一个就是启用opcache:
别忘了启用Zend Opcache 因为 PHP7 更快,即使没有启用 Opcache。它比启用Opcache更快,所以在之前的测试期间有人没有启用Opcache
那么Opcache是什么?
Opcache的前身是Optimizer+,它是由PHP官方公司Zend开发的一个闭源但免费的PHP优化加速组件。 Optimizer+ 将通过预编译 PHP 代码创建的 Opcode 脚本文件缓存在共享内存中以供将来重用,从而避免花费时间从磁盘读取代码并重新编译。同时,它还使用了一些代码优化方法,使代码运行得更快。这可以加快 PHP 的执行速度。
典型的PHP执行流程如下
请求请求(nginx、apache、cli等)--> Zend引擎读取.php文件-->检查其字典和表达式-->解析文件-- -> 生成要执行的计算机代码(称为Opcode)-->最后执行Opcode-->响应返回
每次请求PHP脚本时,都会执行上述步骤。如果 PHP 源代码不改变,显然选项代码也不会改变。无需每次都重新创建选项代码。结合无处不在的网络缓存机制,可以缓存操作码。以后直接访问缓存的操作码不是更快吗?启用操作码缓存后的流程图如下:
操作码缓存的目的是防止重复编译,减少CPU和内存负载。
以下表示Opcache的安装
安装:
1。搜索opcache扩展,我的是php7.1
yum list php71*
2。安装扩展
yum install php71w-opcache.x86_64
配置:
zend_extension=
[ opcache]
;启用opcache
opcache.enable=1
;在 CLI 环境下,PHP 启用 OPcache
opcache.enable_cli=1
;OPcache 共享内存大小单位 MB
opcache.memory_conspiration=128
;PHP 使用一种称为 string interning 的技术来提高性能。例如,如果您在代码中使用字符串“foobar”1000次,PHP将仅在第一次使用时分配一个非易失性内存区域来存储该字符串,其余999次将使用该字符串。它直接指向这个内存区域。这个选项将把这个功能提升到一个新的水平 - 默认情况下这个不可变的内存池将只存在于单个 php-fpm 进程中。如果设置了该选项,它将存在于所有 php-fpm 进程中。共享。在较大的应用程序中,这对于节省内存和提高应用程序性能非常有效。
此选项的值以兆字节为单位。如果设置为16,则表示16MB。默认为 4MB
opcache.interned_strings_buffer=8
;该选项用于控制内存中可以缓存的 PHP 文件的最大数量。该选项应设置得足够大,大于项目中所有 PHP 文件的总和。
设置值范围的最小值为 200,PHP 5.5.6 之前的最大值为 100000,PHP 5.5.6 及更高版本为 1000000。这是在 200 到 1,000,000 之间。
opcache.max_accelerated_files=4000
;设置缓存过期时间(以秒为单位)。如果为0,则每次都检查一次。
=60
;它的字面意思是“能够更快地关闭”。它的作用是提供一种更快的机制,在单个请求结束时调用代码中的析构函数,从而加快PHP的响应速度并回收PHP进程资源,以便应用程序可以更快地响应下一个请求。设置为 1 以使用此机制。
opcache.fast_shutdown=1
;如果启用(设置为 1),OPcache 将在设置的秒内检查文件的时间戳,以查看脚本是否是最新的。
如果禁用此选项(设置为 0),它将被忽略并且 PHP 文件永远不会被检查。这意味着如果你改变了你的代码,然后在服务器上更新,然后在浏览器中请求更新代码对应的功能,你将看不到更新的效果
我们强烈建议你在生产环境设为0。更新代码后,顺利重启PHP和Web服务器。
opcache.validate_timestamps=0
;启用 Opcache 文件缓存(实验性)。通过启用此功能,我们可以允许 Opcache 将操作码缓存在外部文件中。某些脚本的性能将会有显着的提高。
这样,PHP 就会在 /tmp 目录中缓存一些可能存在于整个 PHP 生命周期的操作码导出二进制文件。
查看phpinfo:
测试结果:
同样的界面从之前的百毫秒发生了变化,现在增加到了50ms左右
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。