0

0

一分钟了解PHP7性能的蜕变(性能提升4倍)

慕斯

慕斯

发布时间:2021-06-25 10:22:11

|

3669人浏览过

|

来源于CSDN

转载

PHP中我们了解了那么多关于php7的知识,不知道你们对php7有多少了解,我相信很大一部分人会不知道这部分知识点,那么不急本篇文章就是带领大家更深刻的去了解这个内容。

研究PHP7技术的背景

  1. 公司开源节流的大背景下 我们需要节省成本
  2. PHP7相对于现在魅族线上的PHP版本5.X 性能提升至少一倍以上
  3. 社区日活用户增长迅速(15年数据 日均PV 年增长348% 日均UV年增长112%)
  4. 移动互联网的大环境下 要求我们的程序能够更快的速度响应用户的请求 以满足更好的用户体验
  5. 对新技术的求知欲望(满足自己的一点点虚荣心)

PHP7性能小记

PHP7性能初印象(比PHP5提升3倍+)

1. 性能对比 - 快速排序算法(随机生成5000个数后按照快速算法排序)

这里写图片描述
php5.1 5000个数快速排序平均响应时间2587ms
php5.2 5000个数快速排序平均响应时间2625ms
php5.3 5000个数快速排序平均响应时间2509ms
php5.4 5000个数快速排序平均响应时间2339ms
php7.0 5000个数快速排序平均响应时间685ms

2.性能对比 - WordPress首页

这里写图片描述
PHP5.1 WordPress平均响应时间505ms
PHP5.2 WordPress平均响应时间521ms
PHP5.3 WordPress平均响应时间498ms
PHP5.4 WordPress平均响应时间470ms
PHP7.0 WordPress平均响应时间158ms

3.性能对比 - Flyme社区APP

这里写图片描述
PHP5.4 500个数快速排序TPS 552
PHP7.0 500个数快速排序TPS 3165
Flyme社区APP首页 PHP5.4 TPS 1535
Flyme社区APP首页 PHP7.0 TPS 1975
Flyme社区APP板块列表页 PHP5.4 TPS 2237
Flyme社区APP板块列表页 PHP7.0 TPS 2387

性能测试遇到的几个问题&解决办法

为什么PHP7的性能可以提高这么多?

1. JIT
2. Zval的改变
3. 内部类型zend_string
4. PHP数组的变化(HashTable和Zend Array)
5. 函数调用机制(Function Calling Convention)
6. 通过宏定义和内联函数(inline),让编译器提前完成部分工作

为什么PHP7的在实际的业务性能提高才30%左右?

  1. 实际的业务不一定有很复杂的计算逻辑
  2. 实际的业务会用到Redis 和MYSQL,网络和IO的瓶颈 影响了PHP7的整体性能
  3. HTTPS的性能问题 限制了PHP7的能力

Redis Proxy的问题

Redis Proxy目的是为了做Redis高可用&分布式缓存用的
经过性能测试,相对直接连接redis而已,用Proxy的性能损耗在10-15%左右(不同的业务 可能影响有比较大的差异)

立即学习PHP免费学习笔记(深入)”;

那么Proxy是不是还有优化的空间的呢?

PHP和Redis长短链接的问题

PHP7 Redis长连接比短连接性能高10%左右(不同的业务差别比较大)

MYSQL数据库连接池的问题

这里写图片描述

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。
Atlas 是360开发和维护的数据库中间件。是一个位于应用程序与MySQL之间,它实现了MySQL的客户端与服务端协议,作为服务端与应用程序通讯,同时作为客户端与MySQL通讯。它对应用程序屏蔽了DB的细节,同时为了降低MySQL负担。

Atlas 支持主库宕机不影响读、读写分离、自动分表、安全处理、平滑重启、连接池等
用了数据库连接池后 TPS性能杠杠的 整整提高了80%
来看看效果吧

这里写图片描述

商达讯网店系统豪华版
商达讯网店系统豪华版

sdxShop是一款完全开源免费的网上独立建店系统,asp+access,程序经过专业团队开发升级发展了7年,功能和安全性已经达到非常成熟稳定,安装容易,一分钟就可以搭起专业的电子商务网站。该免费版功能完整永久免费,主要特色功能淘宝数据表导入,实现网店和淘宝网店数据统一,拓展网店经营策略,提供5种在线支付接口等等。

下载

PHP7性能优化的几个细节

PHP7 Opcache(提升1倍左右)

Opcache的工作原理 ?
  1. PHP是解释型语言,Zend引擎会将PHP代码解释为可执行机器码(Operate Code)之后再交由CPU执行。
    这里写图片描述
  2. Opcache是如何加速的
    这里写图片描述

  3. 看看加了opcache后的成果吧(请求平均响应时间足足减少了一倍 有木有)
    这里写图片描述

编译器GCC4.8+PGO(提升5%-10%)

PGO是一项编译优化技术,它可以配合GCC等编译器使用,提高编译器的编译效率。
虽然PGO可以提高编译效率,但它并没有被广泛使用。
原因很简单:
1. 它繁杂的双编译模型 和 有限的使用场景,让PGO显得很鸡肋
2. 在有了opcache这样的产品出现后,PGO带来的性能提升并不是很明显。

开启多个PHP-FPM主进程(提高10%左右)


    #php-fpm.conf 
    listen = /dev/shm/php-fcgi.sock
    #php-fpm2.conf 
    listen = /dev/shm/php-fcgi2.sock

    #/usr/local/php/sbin/php-fpm --fpm-config /usr/local/php/etc/php-fpm.conf
    #/usr/local/php/sbin/php-fpm --fpm-config /usr/local/php/etc/php-fpm2.conf

    #代理
    upstream backend{
        server unix:/dev/shm/php-fcgi.sock;
        server unix:/dev/shm/php-fcgi2.sock;
    }

HugePage(提升2%-3%)

默认的内存是以4KB分页的,而虚拟地址和内存地址是需要转换的, 而这个转换是要查表的,
CPU为了加速这个查表过程都会内建TLB(Translation Lookaside Buffer), 显而易见如果虚拟页越小,表里的条目数也就越多,
而TLB大小是有限的,条目数越多TLB的Cache Miss也就会越高, 所以如果我们能启用大内存页就能间接降低这个TLB Cache Miss。


    opcache.huge_code_pages=1
    sudo sysctl vm.nr_hugepages=128

相性能参数优化

PHP部分性能参数优化

  1. php.ini配置

    
        opcache.enable=1
        opcache.enable_cli=1
        opcache.memory_consumption=128
        opcache.interned_strings_buffer=8
        opcache.max_accelerated_files=4000
        opcache.revalidate_freq=60
        opcache.save_comments=0
        opcache.fast_shutdown=1
        opcache.huge_code_pages=1
        opcache.file_cache=/dev/shm/opcache/
    
  2. PHP-FPM

    
        listen = /dev/shm/php-fcgi.sock
        pm = static
        pm.max_children = 320
        pm.max_requests = 10240
    

未解决的问题

Nginx HTTPS的性能问题

研究PHP7技术的背景

  1. 公司开源节流的大背景下 我们需要节省成本
  2. PHP7相对于现在魅族线上的PHP版本5.X 性能提升至少一倍以上
  3. 社区日活用户增长迅速(15年数据 日均PV 年增长348% 日均UV年增长112%)
  4. 移动互联网的大环境下 要求我们的程序能够更快的速度响应用户的请求 以满足更好的用户体验
  5. 对新技术的求知欲望(满足自己的一点点虚荣心)

相关学习视频分享:php视频教程

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2589

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1619

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1507

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

952

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1417

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1234

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1447

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1306

2023.11.13

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

9

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.3万人学习

Django 教程
Django 教程

共28课时 | 3.1万人学习

PHP课程
PHP课程

共137课时 | 8.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号