当前位置 博文首页 > 文章内容

    高质量笔记来了!关于PHP7性能优化

    作者:shunshunshun18 栏目:未分类 时间:2021-09-19 10:45:07

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    Opcache

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

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

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

    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性能优化笔记

    推荐学习:《》