PHP7 VS HHVM (WordPress)

作者: Laruence( ) 本文地址: http://www.laruence.com/2014/12/18/2976.html 转载请注明出处

其实我已经在很多场合说过, PHP7的性能已经和HHVM相当了..

但是呢, 总是有人问…

另外感觉微博并不能特别好的留存, 所以我写个BLOG吧.

这篇BLOG, 我将进行最客观的对比测试, 就用ab来压测一下Wordpress的首页..

来对比看看PHP7和HHVM-3.2.0的性能在Wordpress上的性能对比.

机器配置:

CPU: 4 X Intel(R) Xeon(R) CPU           E5410  @ 2.33GHz
Mem: 16G

环境配置:

Nginx + PHP-FPM
Nginx + HHVM

软件版本:

PHP7 - 79354ba6d0d6a1a4596f9ac66ee9bc3a34ed972b
HHVM-3.2.0

HHVM的配置:

$ cat /etc/hhvm/server.ini
; php options

pid = /var/run/hhvm/pid

; hhvm specific

hhvm.server.host = 127.0.0.1
hhvm.server.port = 9000
hhvm.server.type = fastcgi
;hhvm.server.file_socket = /var/run/hhvm/hhvm.sock
hhvm.server.default_document = index.php
hhvm.log.level = Error
hhvm.log.always_log_unhandled_exceptions = true
hhvm.log.runtime_error_reporting_level = 8191
hhvm.log.use_log_file = true
hhvm.log.file = /var/run/hhvm/error.log
hhvm.repo.central.path = /var/run/hhvm/hhvm.hhbc
hhvm.mysql.typed_results = false

PHP的配置(pm.max_children和你的cpu核数相当):

php-fpm.conf:
pm = static
pm.max_children = 4

php.ini (opcache):
zend_extension=opcache.so
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.enable_file_override=1

为了显示测试的客观性, 我决定采用屏幕录制的办法, 我会把我测试的时候的过程录制下来. 大家参看即可..

视频:

测试结果如下(俩个测试都会首先用100个请求预热, 然后开始100个并发, 10000个请求ab压测):

PHP7:

Concurrency Level:      100
Time taken for tests:   38.726 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      89290000 bytes
HTML transferred:       86900000 bytes
Requests per second:    258.22 [#/sec] (mean)
Time per request:       387.260 [ms] (mean)
Time per request:       3.873 [ms] (mean, across all concurrent requests)
Transfer rate:          2251.64 [Kbytes/sec] received

HHVM-3.2

Document Path:          /wordpress/
Document Length:        8690 bytes

Concurrency Level:      100
Time taken for tests:   43.296 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      89260000 bytes
HTML transferred:       86900000 bytes
Requests per second:    230.97 [#/sec] (mean)
Time per request:       432.957 [ms] (mean)
Time per request:       4.330 [ms] (mean, across all concurrent requests)
Transfer rate:          2013.31 [Kbytes/sec] received

结论,

PHP7 – 258.22 QPS

HHVM – 230.97 QPS

PHP7的在真实场景的性能确实已经和HHVM相当, 在一些场景甚至超过了HHVM(PS: 我是想基于HHVM-3.3测试, 但是我的Ubuntu 13.10实在是编译不成功, 所以拿3.2测试, 他们的差别也不会太大).

最后, PHP7将会在明年10月发布正式版, 我相信我们还会让它更快, 大家拭目以待吧 :)

PS: 我之所以发这个文章, 还有一个原因, 是因为某公司发表了一系列的文章来谈他们迁移HHVM. 其中有一这么一段, 是他们发现业务在PHP5.5(注意还不是7哦)和HHVM之间并没有他们期望的大的性能区别, 于是他们针对HHVM和PHP5.5分别做了优化以后, 再来对比, 得出一个”通用结论”.

那么问题就来了, 这就相当于是用HHVM写了个功能,然后用PHP又写了一个功能, 这俩者代码不完全相同, 逻辑不完全相同, 你能用这个对比来做出一个”通用结论”么?

因为, 你针对PHP的优化, 到底做了多少, 做的好不好, 很难评价, 也许换个人做优化, 还能得出完全相反的结论(就比如, 我们基于PHP5.4, 也做了一些优化, 让微博手机服务端的性能提升了2.6倍, 服务器减少了60%, 这又怎么说: 优化介绍: 微博LAMP性能优化之路)?

那个文章还有这么一句:”hhvm是基于php5.4的语法标准,因此,hhvm和php5.5与我们目前用的php5.2都存在语法差异,php5.5差异更大一些。”

这个叫做差异? 5.5对5.2那可是99%的兼容… 你把HHVM的不兼容点和PHP5.5的新语法都叫做差异? 那是一回事么?

Comments

2014/12/18, royee writes: 沙发。。。2014/12/18, Hassan writes: 期待PHP7...2014/12/18, walu writes: 这发博客频率也太低了...哈哈2014/12/18, foyon writes: 顶鸟哥2014/12/18, goodboy writes: 支持一下,看好PHP72014/12/18, barbery writes: 大赞...非常期待PHP7啊啊啊啊2014/12/18, oboodo writes: 板凳2014/12/18, cheungzee writes: php是最好的语言2014/12/18, Monster writes: 都在努力提升性能,求不黑php!@xxx?2014/12/18, 花生 writes: 赞一个,别再黑我大PHP了。。哈哈2014/12/18, isaced writes: 期待PHP7...2014/12/18, fantiq writes: 不能忍2014/12/18, star001007 writes: 别在黑我大PHP了2014/12/18, 1rerere writes: 1r2014/12/18, Anonymous writes: 顶 php是最好的语言2014/12/18, jan writes: php是世界上最好的语言2014/12/18, westup writes: php必须是最好的语言,我认真地2014/12/18, Anonymous writes: 更加爱python和scala 哈哈哈哈哈。目前在用java = =!2014/12/18, mot writes: PHP7的正式版向下兼容5.3+吗2014/12/18, Anonymous writes: http://lamp.baidu.com/2014/10/16/php-engine-investigation/2014/12/18, king writes: HHVM在处理静态内容方面变现很差 期待PHP72014/12/18, moxian writes: 别在黑我大PHP了! 期待php72014/12/18, moxian writes: php是最好的语言! 别再黑我大PHP了! 期待PHP!2014/12/18, 欧阳集群 writes: 别再黑我大PHP了2014/12/18, Demon writes: 打倒hhvm, php7雄起!2014/12/18, 叫我康哥 writes: 我只想知道到时候我从5.4升级到7会不会出很多bug2014/12/18, doubear writes: PHP一定会是世界上最好的语言,我认真的!!2014/12/18, 1 writes: 顶 php是最好的语言2014/12/18, yearnfar writes: HHVM编译安装太tm蛋疼了2014/12/18, hilojack writes: 期待,希望php 更强更好!2014/12/18, alan writes: 别再黑我大PHP了2014/12/18, tlanyan writes: 别在黑我PHP了2014/12/19, php360 writes: 支持2014/12/19, php360 writes: 支持一下,向您学习2014/12/19, skyforce writes: 期待 PHP 7 的到来,向鸟哥努力学习!2014/12/19, ohmygirl writes: 鸟哥好久不写博客了,微博上几次留言的问题也没有回复。2014/12/19, chenjie writes: 支持,期待7。评测就应该像鸟哥这样很客观2014/12/19, Winsen writes: 看得出来,鸟哥很火大…………2014/12/19, kn007 writes: 明年10月,如果能再早就好了!2014/12/20, Ruchee writes: 期待2014/12/20, Fwolf writes: 5.4 都还没完全普及,7 就要出了啊。。。好快, 估计到时候直接把 6 跳过去?2014/12/21, 新一 writes: 真心希望早点发布。这样子我们可以应用了。2014/12/22, Melo618 writes: http://www.douban.com/group/topic/12629451/?qq-pf-to=pcqq.group 第五个鸟哥上榜2014/12/23, iat.net.cn writes: 永远支持鸟哥2014/12/31, baidudev writes: 鸟哥 http://lamp.baidu.com/2014/12/31/hhvm-vs-phpng/2015/01/02, Andrew writes: 学习下2015/01/04, eechen writes: http://www.cnblogs.com/hxdoit/p/4155436.html php-fpm正在生成页面时,浏览器刷新后,php-fpm并不会退出.浏览器关闭请求后,nginx会通知到php-fpm,但php-fpm忽略了这个通知,继续处理,直到发送处理结果时,才知道了连接已经被关闭.我想在这里,php-fpm在连接的处理上是不是还存在可以优化的空间,也就是nginx通知php-fpm连接结束时,php-fpm应该退出而不是继续执行.2015/01/04, 淡兰色的海洋 | centos6.4配置安装nginx+hhvm3.2 writes: [...] 最后,期待PHP7,参考鸟哥的博客《php7 VS HHVM》 [...]2015/01/06, liuxd writes: 额,直接PHP7了,而且明年10月份就发布。。。 意识是PHP6被跳过了?2015/01/09, flash866 writes: “另外它采用JIT, 那么意味着, 重启以后要预热, 没有预热的情况下, 性能较为糟糕。”----完全看不懂啊!!什么是“预热”??鸟哥普及一下吧、2015/01/10, tyftyftyf writes: 给博主提几点注意噢: HHVM在那个配置下仍然会每个请求都检查文件是否变更,而PHP7已经用了opcache.validate_timestamps=0关闭了这种检查。HHVM用Repo.Authoritative关闭检查之后性能又能提示20%左右。 HHVM会把字节码存到本地数据库,所以重启之后不需要重新编译。PHP则每次重启都得填充OpCache。(这里是对bytecode的处理作比较,HHVM还会把热路径进一步编译成机器码) 其他方面的评测还是非常客观的。支持PHP,支持HHVM,期待PHP7!2015/01/10, 雪候鸟 writes: @tyftyftyf 你理解错了, 检查文件变更的是这个: opcache.revalidate_freq=60 表示60s检查一次. 而HHVM如果开启repo模式, 那意思是什么呢? 就是离线编译然后上线, 这个已经不是我们要考虑的方式了. Anyway, 恩.. 其实我只是想说的是性能相当. :)2015/01/13, tyftyftyf writes: @雪候鸟,博主说的有道理,不过关于文件检查那块,我看http://php.net/manual/en/opcache.configuration.php#ini.opcache.validate-timestamps讲的是,opcache.validate_timestamps=0的时候,opcache.revalidate_freq会被忽略,所以net effect还是永远都不检查。不是么?:p2015/01/17, php性能php7-vs-hhvm | 温柔的大海 writes: [...] PHP7 VS HHVM (WordPress) [...]2015/01/24, 烟花易冷 writes: 作为一名wordpressaihaozhe,guolaizhic一下大phpng,博主加油2015/01/27, Laruence writes: @tyftyftyf 恩, 你是对的, 我搞错了, 我刚刚重新跑了一下测试, 实际上几乎没有差别(不稳定的, 能差了2个qps) , 考虑更新视频太麻烦, 对结论的影响也不大, 我就不修改了 . :), thanks2015/01/31, php7的初体验 | 老陈是一个普通的文艺二逼青年 writes: [...] 附: 新浪鸟哥做的php7对应hhvm的测试比较 [...]2015/02/12, Anonymous writes: 我希望PHP7有强类型约束。2015/02/15, booters writes: Thanks for sharing your thoughts. I really appreciate your efforts and I will be waiting for your further post thanks once again.2015/02/24, williamLu writes: 期待正式版本发布。。。 感谢付出。。2015/02/24, Julien BENOIT writes: Hi Laruence, thanks for this benchmark. But I would like to know about PHP7 and HHVM configuration. Did you apply special tuning? If yes, was it the best performance tuning for both? Unless, you use "stock" configuration? Maybe you answer this question in your article, but unfortunately, I don't speak neither read chinese :( Thanks. Julien.2015/03/27, heyuejan writes: wordpress 的压测没有做过。wordpress 的QPS因该跟DB也有一点关系吧, 我们压测一般是用纯CI框架压的,php5.4 四核 2.3 虚拟机 QPS大概是 一千四左右。2015/04/05, lonely writes: class a{ public static function s(){ //这里有没有办法判断是静态调用还是非静态调用, //如果可以判断.怎么来获取调用的对象呢? } }; $sss=new a(); $sss->s(); a::s(); 请教 Laruence 望答复2015/04/19, 北京SEO writes: 博客不错哦2015/06/10, 橘子 writes: 其实我觉得这也不尽公平。 PHP7目前还没有支持较广的稳定版(相对主流CMS而言。 而HHVM已经能较好的支持主流CMS2015/06/12, Brian writes: 对于 HHVM 和 PHP 7 的对比没看出来有什么,只看到 worldpress 的性能差的到家了。2015/07/17, 27joy.CN耕耘网 writes: 相信PHP7,对于其他复杂的东西,真心不怎么想学,浪费时间,还是PHP简单易用2015/09/16, margee writes: 很期待哟2015/12/03, Anonymous writes: php7 即便性能与 hhvm 相当,多进程模型也会带来无法在运行时加载大型词典的弊端,真实的业务场景不是总能做到 share nothing 的。 同理,多线程的 crash 也未必是多大运维压力,如果你有 1000 台 server,面临的完全是另一个层面的问题。 某公司在优化方面做的功夫是你看不到的,请不要因为管过小小微博就妄言需要几十万台 server 才能驱动的服务。2015/12/05, Mingxiu writes: @Anonymous, "多进程模型也会带来无法在运行时加载大型词典的弊端, "呵呵了, 你知道共享内存么? 你知道共享内存可以加锁么? 你知道这个模型下经典的0/1切换方案么?2016/03/25, 2 writes: 22016/04/12, taibao writes: php7性能真心不错,php7的前途越来越光明了。2016/09/27, 雅思学习 writes: 相比于HVMM,PHP7的兼容性相对要好一些,希望PHP7能够发展的更好,也感谢开源社区的无私贡献。2016/10/17, 歪麦 writes: 即使是现在,依然很相信PHP7的能力!!2017/03/17, log4geek.cc writes: PHP是世界上最好的语言 PHP7一统江湖~ 我的小站也收集了一些PHP技术资料,欢迎各位逛逛 http://log4geek.cc/category/php/2017/05/03, 雅思预测 writes: 开启Hugepage后,WP的性能反而有些降低,不知道为什么。2017/05/20, 盘古科技 writes: 雁过留声,风过无痕2017/12/07, 鳄鱼皮钱包 writes: 虽然自己也是学计算机网络的,当是还是看的有点吃力

Related posts:

让PHP7达到最高性能的几个Tips在Qcon 2015 北京上的演讲PPT – PHP7让你的PHP7更快之HugepageYaf的性能对比测试2012年1月全球www网站技术报告Copyright © 2010 风雪之隅 版权所有, 转载务必注明. 该Feed只供个人使用, 禁止未注明的转载或商业应用. 非法应用的, 一切法律后果自负. 如有问题, 可发E-mail至my at laruence.com.(Digital Fingerprint: 73540ba0a1738d7d07d4b6038d5615e2)

Related Posts:

在Qcon 2015 北京上的演讲PPT – PHP7PHP的性能演进(从PHP5.0到PHP7.1的性能全评测)让PHP7达到最高性能的几个Tips让你的PHP7更快(GCC PGO)Yaconf – 一个高性能的配置管理扩展

文章来源:

Author:Laruence
link:http://www.laruence.com/2014/12/18/2976.html