PHP7性能优化的内容有哪些

Opcache

1. Opcache原理
PHP的正常执行流程如下

PHP7性能优化的内容有哪些

request请求(nginx,apache,cli等)–>Zend引擎读取.php文件–>扫描其词典和表达式 –>解析文件–>创建要执行的计算机代码(称为Opcode)–>最后执行Opcode–> response 返回

每一次请求PHP脚本都会执行一遍以上步骤,如果PHP源代码没有变化,那么Opcode也不会变化,显然没有必要每次都重新生成Opcode,结合在Web中无所不在的缓存机制,我们可以把Opcode缓存下来,以后直接访问缓存的Opcode岂不是更快,启用Opcode缓存之后的流程图如下所示:

PHP7性能优化的内容有哪些

Opcode cache 的目地是避免重复编译,减少 CPU 和内存开销。
2. Opcache配置
在php.ini下添加:

// 加载opcache(需确认已安装opcache拓展)
zend_extension=opcache.so
// 开启opcache
opcache.enable = 1
// OPcache共享内存存储大小,单位MB
opcache.memory_consumption=1024 // 1G
// PHP使用了一种叫做字符串驻留,默认是4MB
opcache.interned_strings_buffer=32
// 这个选项用于控制内存中最多可以缓存多少个PHP文件,这个选项必须得设置得足够大,大于你的项目中的所有PHP文件的总和
opcache.max_accelerated_files=80000
// 设置缓存的过期时间(单位是秒),为0的话每次都要检查
opcache.revalidate_freq=3
// 从字面上理解就是“允许更快速关闭”
opcache.fast_shutdown=1
// CLI环境下,PHP启用OPcache
opcache.enable_cli=1

HugePage

1. HugePage原理
通过启用这个特性,PHP7会把自身的TEXT段(执行体)”挪“到Huagepage上,之前的测试,我们能稳定的在Wordpress上看到2%~3%的QPS提升。
关于Hugepage是啥,简单的说下就是默认的内存是以4KB分页的,而虚拟地址和内存地址是需要转换的, 而这个转换是要查表的,CPU为了加速这个查表过程都会内建TLB(Translation Lookaside Buffer), 显而易见如果虚拟页越小,表里的条目数也就越多,而TLB大小是有限的,条目数越多TLB的Cache Miss也就会越高, 所以如果我们能启用大内存页就能间接降低这个TLB Cache Miss,至于详细的介绍,Google一搜一大堆我就不赘述了,这里主要说明下如何启用这个新特性, 从而带来明显的性能提升。
2. HugePage配置

$ sudo sysctl vm.nr_hugepages=512 // 切勿越大越好,会长占内存

分配512个预留的大页内存:

cat /proc/meminfo  | grep Huge
AnonHugePages:    106496 kB
HugePages_Total:     512
HugePages_Free:      504
HugePages_Rsvd:       27
HugePages_Surp:        0
Hugepagesize:       2048 kB

然后在php.ini中加入:

opcache.huge_code_pages=1

Opcache file cache

1. Opcache file cache介绍
使用opcache把编译后的php文件存储为文件,实现php源码保护和脚本加速, 会有很明显的性能提升
2. Opcache file cache配置
在php.ini中加入:

opcache.file_cache=/tmp

这样PHP就会在/tmp目录下Cache一些Opcode的二进制导出文件, 可以跨PHP生命周期存在.

配置后需重启php-fpm

亲测

系统:centOs 7
php版本:7.4
nginx
laravel: 8.5

优化前

cpu:95%-96%
内存:2G/16G
10分钟4W并发
失败率:24%

聚合报告
PHP7性能优化的内容有哪些

每秒处理事务
![PHP7性能优化]
![PHP7性能优化笔记]
PHP7性能优化的内容有哪些

优化后

cpu:20%-40%
内存:5.8G/16G(此处我HugePage设置2048)
10分钟4W并发
失败率:0%

第一次压测

聚合报告
PHP7性能优化的内容有哪些

每秒处理事务

PHP7性能优化的内容有哪些

第二次压测

聚合报告

PHP7性能优化的内容有哪些

每秒处理事务

PHP7性能优化的内容有哪些

原创文章,作者:MZTOJ,如若转载,请注明出处:http://www.wangzhanshi.com/n/9829.html

(0)
MZTOJ的头像MZTOJ
上一篇 2025年1月1日 16:51:50
下一篇 2025年1月1日 16:51:52

相关推荐

  • PHP7中的禁忌有哪些

    1、不要使用mysql_ 函数 这一天终于来了,从此你不仅仅“不应该”使用mysql_函数。PHP7已经把它们从核心中全部移除了,也就是说你需要迁移到好得多的mysqli_函数,或…

    php 2025年1月1日
  • Centos下安装PHP7版本Xdebug的方法

    今天小编给大家分享的是Centos下安装PHP7版本Xdebug的方法,很多人都不太了解,今天小编为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。 …

    2025年1月1日
  • PHP7 垃圾回收机制是什么?

    垃圾回收机制 垃圾回收机制是一种动态存储分配方案。它会自动释放程序不再需要的已分配的内存块。 自动回收内存的过程叫垃圾收集。垃圾回收机制可以让程序员不必过分关心程序内存分配,从而将…

    2025年1月1日
  • PHP单文件实现代码去行首尾空格和去空行

    示例代码 <?php if($_GET[“x”] == “cha”){ $tips = isset($_POST[‘tips’]) ? $_POST[‘tips’] : ”…

    php 2024年12月17日
  • PHP7.x中每一个版本的新特性是什么

    PHP 7.0 标量类型声明 什么是标量类型? 四种标量类型: boolean (布尔型) integer (整型) float (浮点型, 也称作 double) string …

    php 2025年1月1日
  • php7中怎么安装yaf扩展

    php7 yaf扩展的安装方法:1、下载yaf扩展库源码安装包;2、下载yaf扩展库源码安装包;3、解压yaf扩展yaf包;4、生成编译configure配置文件;5、执行配置文件…

    2025年1月1日
  • PHP7如何安装event扩展

    PHP7 安装 event 扩展 Libevent 是一个用C语言编写的、轻量级的开源高性能I/O框架,支持多种 I/O 多路复用技术: epoll、 poll、 dev/poll…

    php 2025年1月1日
  • php7.0如何安装redis扩展

    php7.0安装redis扩展的方法:首先查看自己PHP的版本;然后下载并解压redis;最后在php.ini文件中添加“extension=php_redis.dll”即可。 1…

    2025年1月1日
  • apache如何支持php7

    apache支持php7的设置方法: 1、修改 SRVROOT,这里定义了 apache 的安装路径,相当于一个变量,后面很多地方会用到这个变量 # 修改37行,将其改为 Defi…

    php 2025年1月1日
  • PHP5和PHP7取数组元素作动态函数名有什么差异

    今天小编给大家分享的是PHP5和PHP7取数组元素作动态函数名有什么差异,相信很多人都不太了解,为了让大家更加了解PHP5和PHP7取数组元素作动态函数名的差异,所以给大家总结了以…

    2025年1月1日

发表回复

登录后才能评论