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

所属分类: 网络编程 / PHP编程 阅读数: 1135
收藏 0 赞 0 分享

伴随着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)。

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%左右的性能提升。

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安装与编译

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扩展可供安装。

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

5、这是PHP 7信息显示。

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

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

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

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

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%。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

五、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。感谢快乐家园博主的提醒。

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

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

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的开发行列中。

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

更多精彩内容其他人还在看

TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例

这篇文章主要介绍了TP5(thinkPHP5)框架基于ajax与后台数据交互操作,结合实例形式分析了thinkPHP5前端基于jQuery的ajax数据提交及后台数据接收、处理相关操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

PHP利用Mysql锁解决高并发的方法

这篇文章主要介绍了PHP利用Mysql锁解决高并发的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

php 后端实现JWT认证方法示例

这篇文章主要介绍了php 后端实现JWT认证方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

ThinkPHP框架实现定时执行任务的两种方法分析

这篇文章主要介绍了ThinkPHP框架实现定时执行任务的两种方法,结合实例形式分析了2种被动执行定时任务的相关操作技巧与注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

PHP命名空间与自动加载类详解

这篇文章主要介绍了PHP命名空间与自动加载类,结合实例形式详细分析了php自动加载类与命名空间原理、使用方法及相关操作注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

PHP时间处理类操作示例

这篇文章主要介绍了PHP时间处理类,结合实例形式分析了DateTime、DateTimeZone、DateInterval及DatePeriod等常用日期时间处理类简单操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

利用PHP扩展Xhprof分析项目性能实践教程

XHProf是Facebook开发的性能调试工具,能帮助直观的统计显示PHP程序执行中各方法函数调用次数和消耗时间,以方便我们排查性能瓶颈并进行调优。下面这篇文章主要给大家介绍了关于利用PHP扩展Xhprof分析项目性能实践的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Django 标签筛选的实现代码(一对多、多对多)

这篇文章主要介绍了Django 标签筛选的实现代码(一对多、多对多),本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

PHP使用pdo实现事务处理操作示例

这篇文章主要介绍了PHP使用pdo实现事务处理操作,结合实例形式较为详细的分析了php基于pdo实现事务处理的相关原理与操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

thinkPHP框架实现类似java过滤器的简单方法示例

这篇文章主要介绍了thinkPHP框架实现类似java过滤器的简单方法,结合实例形式分析了thinkPHP基于继承实现的登录验证功能相关操作方法,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多