PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)


Posted in PHP onJuly 27, 2017

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

伴随着PHP 7的发布,这几天关于PHP 7性能和兼容性成了大家讨论的热点话题,PHP 7表现出来的高性能让不少人蠢蠢欲动,有些“尝鲜”的朋友已经将PHP 7应用到了生产环境当中了。同时,LNMP等热门应用程序也及时作了更新,纷纷开始支持PHP 7。

提到PHP性能问题,不得不说之前分享的HHVM,这是脸谱公司为提高PHP性能而开发出来的工具,使用了 Just-In-Time (JIT) 编译方式将 PHP 代码转换成某种字节码。实际测试过程中,HHVM对于PHP的性能提高是一个质的飞跃,高效的PHP运行环境提升PHP性能9倍以上。

近些年来PHP广为人诟病就是性能瓶颈方面的问题,不少的开发者纷纷弃PHP而逃,而HHVM的完美表现对于PHP发展是非常不利的。PHP 7 是 PHP 社区对 HHVM 的回应,PHP 7正式发布版在PHP性能方面很到了非常大的改善,实际测试发现在部分场合PHP 7性能超过了HHVM。

本篇文章就为大家带来PHP 7安装与使用体验,想要急切体验PHP 7性能的朋友,在正式升级PHP之前最好多做几次程序兼容性测试,虽然官方说PHP 7向后兼容性有99%,但是为了保险起见我们应用到生产环境当中还是需要保持谨慎的态度。

PHP 7安装使用体验:性能大提升,兼容性强,扩展支持不够,升级PHP要谨慎

一、发挥PHP 7高性能的几个要点

PHP 7相对于之前的PHP版本来说可以说性能有了质的飞跃,但是所谓“好马配好鞍,好车配风帆”,想要发挥PHP 7的性能优势,还需要从以下几个方面做准备:(此部分引自PHP7核心开发者, Yaf, Yar, Yac等项目作者:Laruence)。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

1. 记得启用Zend Opcache,启用Opcache非常简单, 在php.ini配置文件中加入:

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1"

2. 使用新的编译器, 推荐GCC 4.8以上, 因为只有GCC 4.8以上PHP 7才会开启Global Register for opline and execute_data支持, 这个会带来5%左右的性能提升。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

3. 开启HugePage有利于PHP 7更快, 首先在系统中开启HugePages, 然后开启Opcache的huge_code_pages,以CentOS 6.5为例, 通过命令:$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,这样一来, PHP会把自身的text段, 以及内存分配中的huge都采用大内存页来保存, 减少TLB miss, 从而提高性能.

4. 开启Opcache File Cache(实验性), 通过开启这个, 可以让Opcache把opcode缓存缓存到外部文件中, 对于一些脚本, 会有很明显的性能提升。方法是在php.ini中加入:opcache.file_cache=/tmp。这样PHP就会在/tmp目录下Cache一些Opcode的二进制导出文件, 可以跨PHP生命周期存在.

5. PGO。如果你的PHP是专门为一个项目服务, 比如只是为你的Wordpress, 或者drupal, 或者其他什么, 那么你就可以尝试通过PGO, 来提升PHP, 专门为你的这个项目提高性能。具体的, 以wordpress 4.1为优化场景.. 首先在编译PHP的时候首先:$ make prof-gen。

6、然后用你的项目训练PHP, 比如对于Wordpress:$ sapi/cgi/php-cgi -T 100 /home/huixinchen/local/www/htdocs/wordpress/index.php >/dev/null,也就是让php-cgi跑100遍wordpress的首页, 从而生成一些在这个过程中的profile信息。最后:

$ make prof-clean
$ make prof-use && make install

7、这个时候你编译得到的PHP7就是为你的项目量身打造的最高性能的编译版本。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

二、PHP 7安装与编译

1、PHP 7官网:

1、官网:http://php.net/

2、下载:http://php.net/downloads.php或者本站下载地址:点击下载

2、动手能力强的朋友,可以自己直接到官方下载PHP 7,然后手动编辑安装。如果你已经习惯使用lnmp.org站长的LNMP一键安装包,可以试试发布LNMP 1.3测试版,已经增加了增加php7支持:网站平滑迁移到LNMP或LAMP建站环境的方法 。

3、OneinStack提供的LNMP安装包已经有了PHP 7一键安装了,在执行脚本的时候,可以选择PHP 7安装,PHP 7目前只有官方自带的Zend Opcache扩展可供安装。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

4、OneinStack安装PHP 7安装成功。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

5、这是PHP 7信息显示。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

6、这是OneinStack提供的PHP 7的Opcache控制面板。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

三、PHP 7与老版本PHP、HHVM性能对比

1、这是国外开发者测试的PHP 7与PHP 5.6在Wordpress、Drupal等热门程序下表现的性能,结果很明显PHP 7性能提升很多。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

2、PHP 7对于Wordpress等程序来说,不仅仅提升单个执行速度,随着Wordpress运行在PHP 7的时间越久,性能提升就更多。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

3、上文也说到PHP 7对于PHP的性能提升在某些方面已经超过了HHVM,这是国外zend.com官网给出的PHP 5.6、PHP 7、HHVM在不同的程序下执行效率对比结果。

4、在专业开源的电子商务系统Magento上测试PHP 5.6、PHP 7、HHVM的执行效率,PHP 7是PHP 5.6运行速度的两倍,而内存占用还比PHP 5.6低30%。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

5、Drupal 8上测试PHP 7的效率是最快的,已经超过了HHVM。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

6、Wordpress测试时发现,PHP 5.6执行需要占用100MB内存,而PHP 7只要25MB。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

7、在不同的程序执行速度上,PHP 7显然已经领跑,Ruby 2.1、Python 2.7.8、Perl 5.18.4都不及PHP 7。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

四、PHP 7性能测试结果报告

1、空说无凭,PHP 7运行程序的性能到底如何呢?这里部落以一个全新的Wordpress为测试对象,运行在PHP 7上Wordpress首页加载时间测试显示0.029秒,内存是3.39MB。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

2、这是同样的Wordpress页面运行PHP 5.6上的页面加载时间:1.955秒,内存占用了3.92MB。从数据上看,PHP 7已经完胜了PHP 5.6了。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

3、PHP 7运行Wordpress的效率相对于之前的版本确实有了质的提升,为了全面了解PHP 7的性能,这里按照网站服务器压力Web性能测试的方法,用Webbench模拟10秒内200、400个连接数,速度都是8000页面/分以上。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

4、此时,VPS服务器系统负载是3.49。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

5、把模拟的连接数提高到1600个,速度依然保持在8000页面/分以上。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

6、此时,VPS服务器系统负载是17,应该有点吃力了。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

7、把模拟的连接数提高到5000个,速度是4800页面/分,速度开始慢下来了。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

8、此时,VPS服务器系统负载是23,服务器负责过重了。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

9、为了测试PHP 7在本VPS主机承受能力的极限,Webbench模拟10000个连接数在20秒不断访问服务器。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

10、此时,VPS服务器的系统负载近90,应该是到达极限了,但是服务器依然没有死机。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

11、接下来,让我们来看看同样配置的VPS主机运行Wordpress的压力测试结果,首先是用Webbench模拟10秒内200、400个连接数,速度是3600页面/分,相对于上面的PHP 7测试的速度慢了一半。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

12、这是PHP 5.6测试200、400个连接数的系统负载,已经达到了10,明显超出了在PHP 7环境上测试的3.49。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

13、在PHP 5.6测试将模拟连接数提高到1000、2000个,此时速度已经降到1600页面/分,连接成功数也降低到了500左右,远远低于在PHP 7测试时的2700。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

14、此时,系统负载达到了17了。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

15、在PHP 5.6中用Webbench测试连接数为10000,在20秒内不断访问服务器。此时,测试已经卡住,没有结果。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

16、这里VPS服务器的系统负载已经达到了1000以上,服务器已经崩溃了。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

17、PHP 5.6下的Wordpress网站已经宕机了。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

五、PHP 7兼容性问题

1、目前国内的Discuz等还不支持PHP 7,PHP扩展也就只有官方的Opcache可以使用,其它的如eAccelerator、xcache、memcached等,大家可以随时关注扩展支持列表:https://github.com/gophp7/gophp7-ext/wiki/extensions-catalog。php的memcache扩展已经有了:https://github.com/php-memcached-dev/php-memcached/tree/php7 和https://github.com/websupport-sk/pecl-memcache。感谢快乐家园博主的提醒。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

2、经过测试,PHP 7运行Wordpress没有任何问题。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

3、在PHP 7上安装Wordpress插件都没有问题。

PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)

4、PHP 7还有部分函数、运算符等可能出现不兼容问题,不过99%的程序可能不会用到这些。

六、PHP 7安装使用体验小结

1、使用PHP 7后有一个惊喜就是,确实如国外开发者测试的那样,PHP 7性能基本上与HHVM持平,由于HHVM借助实时(Just In Time)编译器将 PHP 代码编译至机器指令,所以不少的PHP程序运行在HHVM是需要改良的。

2、PHP 7具备了HHVM的超高性能,同时又有了PHP向后兼容的优势,相信在不久的未来PHP 7会得到越来越多人的认可和接受。虽然目前支持PHP 7的缓存、加速等扩展还不多,但是这只是时间问题,越来越多的开发者会加入到PHP 7的开发行列中。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
某大型网络公司应聘时的笔试题目附答案
Mar 27 PHP
php中的注释、变量、数组、常量、函数应用介绍
Nov 16 PHP
使用php统计字符串中中英文字符的个数
Jun 23 PHP
php 验证码(倾斜,正弦干扰线,黏贴,旋转)
Jun 29 PHP
分享下PHP register_globals 值为on与off的理解
Sep 26 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
Jun 23 PHP
PHP对象相互引用的内存溢出实例分析
Aug 28 PHP
PHP中上传多个文件的表单设计例子
Nov 19 PHP
简单谈谈php中ob_flush和flush的区别
Nov 27 PHP
Session 失效的原因汇总及解决丢失办法
Sep 30 PHP
php文件上传后端处理小技巧
May 22 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
Feb 07 PHP
laravel 5.4中实现无限级分类的方法示例
Jul 27 #PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
Jul 27 #PHP
PHP实现的Redis多库选择功能单例类
Jul 27 #PHP
PHP策略模式定义与用法示例
Jul 27 #PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 #PHP
php表单文件iframe异步上传实例讲解
Jul 26 #PHP
php实现的统计字数函数定义与使用示例
Jul 26 #PHP
You might like
利用static实现表格的颜色隔行显示的代码
2007/09/02 PHP
PHP删除目录及目录下所有文件的方法详解
2013/06/06 PHP
完美利用Yii2微信后台开发的系列总结
2016/07/18 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
2017/07/10 PHP
使用composer命令加载vendor中的第三方类库 的方法
2019/07/09 PHP
PHP 模拟登陆功能实例详解
2019/09/10 PHP
Javascript中判断对象是否为空
2015/06/10 Javascript
移除AngularJS下URL中的#字符的方法
2015/06/19 Javascript
基于jquery实现在线选座订座之影院篇
2015/08/24 Javascript
JavaScript中用let语句声明作用域的用法讲解
2016/05/20 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
2016/06/22 Javascript
Django使用多数据库的方法
2017/09/06 Javascript
jQuery EasyUI 折叠面板accordion的使用实例(分享)
2017/12/25 jQuery
Vue 仿QQ左滑删除组件功能
2018/03/12 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
vue canvas绘制矩形并解决由clearRec带来的闪屏问题
2019/09/02 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
vue开发移动端底部导航条功能
2020/04/08 Javascript
[03:24]2014DOTA2国际邀请赛 神秘商店生意火爆
2014/07/18 DOTA
python读取TXT每行,并存到LIST中的方法
2018/10/26 Python
PyCharm 解决找不到新打开项目的窗口问题
2021/01/15 Python
HTML5 本地存储之如果没有数据库究竟会怎样
2013/04/25 HTML / CSS
HTML5输入框下拉菜单功能的示例代码
2020/09/08 HTML / CSS
德国箱包网上商店:koffer24.de
2016/07/27 全球购物
新年主持词
2014/03/27 职场文书
先进员工获奖感言
2014/08/14 职场文书
初中优秀教师事迹材料
2014/08/18 职场文书
领导干部查摆“四风”问题自我剖析材料思想汇报
2014/10/05 职场文书
刘胡兰观后感
2015/06/16 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书
Python数据清洗工具之Numpy的基本操作
2021/04/22 Python
python 字典和列表嵌套用法详解
2021/06/29 Python
基于Python实现将列表数据生成折线图
2022/03/23 Python