php 7.0发布在即,一直以来有传言说php7性能有飞跃,于是做了一个测试。
测试环境
硬件 虚拟机2G内存
OS CentOS 6.7 (kernel 2.6.32-573.7.1.el6.x86_64)
Web Apache/2.2.15 (centos 6自带)
php版本选择
5.3.3, CentOS 6自带的版本
5.3.29, 官方5.3分支的最后一个版本,用于跟apache模块做对比
5.6.15,
7.0.0beta3
除了第一个CentOS自带5.3.3是apache模块之外,全部跑在fast-cgi (php-fpm) 模式下,通过apache模块mod_proxy_fcgi整合在apache中(整合方式)。每个版本配置一个虚拟站点,域名分别为 a.dom, b.com... 。
php编译参数
三个自编译版本的编译参数如下(在 /usr/loca 目录下,分别安装到子目录里)
'./configure' '--enable-fpm' '--prefix=/usr/local/php53' '--with-config-file-path=/usr/local/php53/etc' '--with-config-file-scan-dir=/usr/local/php53/etc/php.d' '--enable-exif' '--with-gd' '--with-mysql' '--with-mysqli' '--with-pdo-mysql'
'./configure' '--enable-fpm' '--prefix=/usr/local/php56' '--with-config-file-path=/usr/local/php56/etc' '--with-config-file-scan-dir=/usr/local/php56/etc/php.d' '--enable-exif' '--with-gd' '--with-mysql' '--with-mysqli' '--with-pdo-mysql'
'./configure' '--enable-fpm' '--prefix=/usr/local/php7' '--with-config-file-path=/usr/local/php7/etc' '--with-config-file-scan-dir=/usr/local/php7/etc/php.d' '--enable-exif' '--with-gd' '--with-mysql' '--with-mysqli' '--with-pdo-mysql'
[注] centos自带5.3.3配置参数略,有点长,而且很多模块动态编译成动态加载模块,编译参数里是with-out,所以参数价值不大,故从略。
php7已经移除mysql模块,所以其配置参数里的 --with-mysql 事实上没用,在实际编译中被忽略掉的。
php-fpm配置
php-fpm全部配置成最大20进程,apache也配置成最大20个进程
测试说明
在本机上使用ab测试,减少网络传输的影响,500次连接,并发10,记录 Requests per second(req/s, 以下不再指明),示例
ab -c 10 -n 500 -H "Host: c.dom" http://127.0.0.1/phpinfo.php
[注] 因为使用虚假的域名,所以通过 -H参数指定主机名Host(改host文件也是一样的效果)
测试过程1:phpinfo页面
静态html基准测试,将phpinfo页面的输出保存成html文件,每秒稳定在3000次以上(300并发以下基本上能稳定在3000次,开ab的-k参数的情况下)
(phpinfo页面测试意义其实不大)
版本 次数1 次数2 次数3 --------- -------- -------- ---------- 5.3模块: 810 837 774 5.6: 517 635 663 7.0b3: 675 700 638
这里看出php7的性能并不突出,反而apache模块运行效率更高
测试过程2:新安装wordpress文章页
新安装wordpress,其自带的一篇文章页http://127.0.0.1/wordpress/?p=1
版本 次数1 次数2 次数3 次数4 --------- -------- -------- --------- -------- 5.3模块: 7.00 7.06 6.84 6.91 5.6: 7.54 7.55 7.48 4.55 7.0b3: 10.12 10.38 10.14 10.47
[小结]:5.6 较5.3略有增强,但差别很小;但php7较都有显示提高。
测试过程3:wordpress导入一批文章后的文章页
导入一批文章后,该测试里增加php5.3.29的fast-cgi版本
ab -c 10 -n 500 -H "Host: c.dom" http://127.0.0.1/wordpress/?p=6459
版本 次数1 次数2 次数3 次数4 次数5 平均值 --------- ------ ------- -------- ------- ----- ----- 5.3模块: 5.76 5.60 5.66 5.64 5.82 5.696 5.3 fpm: 5.86 5.97 5.91 6.11 5.97 5.964 5.6: 6.57 6.62 6.65 7.35 5.49 6.536 7.0b3: 8.73 8.33 9.02 9.00 8.67 8.750
[小结]:延续前面的结果,php7比5.x有30%-50%提升,效果明显。
另外5.3的fastCGI及模块差别可以忽略,似乎不像有人说的fastCGI效率有多高。
php7性能提升幅度,似乎也不像鸟哥Laruence所说的翻倍以上的提升(第45页片子)但30%+的提升,也足够让人欣喜了
测试结论
就前面做的测试来看,php7确实比5.x版本有明显提升,值得在生产环境中部署(暂不考虑兼容性)。然而说前面测试结果来看,
附记*php的后向兼容性
按官方文档所示,php7在语言核心方面,变化几乎忽略。主要是彻底放弃php5.4以来已经声明“过时”的特性。
已知可能有较大影响的是 mysql_* 函数被移除,这就意味着使用mysql_*的一些旧应用将无法在php7上跑!一个可选的解决方案是,使用fastCGI,多php版本共存,迁就这些旧应用。
apache下php版本共存,可以参考CentOS 6.x/apache 2.2下php多版本共存探索(模块及fastcgi)/mod_proxy_fcgi实现