其实我已经在很多场合说过, 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测试, 他们的差别也不会太大).
考虑到HHVM的运维复杂度, 他是多线程模型, 这就代表着如果一个线程导致crash了, 那么整个服务就挂了, 并且它不会自动重启
另外它采用JIT, 那么意味着, 重启以后要预热, 没有预热的情况下, 性能较为糟糕
并且多线程模型调试困难, 这对于追求稳定来说的Web服务来说, 是非常不适合的.
那么, PHP7性能提升以后, 我们还有什么理由要用HHVM么?
最后, 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: 支持一下,看好PHP7
- 2014/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: 1r
- 2014/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在处理静态内容方面变现很差
期待PHP7
- 2014/12/18, moxian writes: 别在黑我大PHP了!
期待php7
- 2014/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会不会出很多bug
- 2014/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还是永远都不检查。不是么?:p
- 2015/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) , 考虑更新视频太麻烦, 对结论的影响也不大, 我就不修改了 . :), thanks
- 2015/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已经能较好的支持主流CMS
- 2015/06/12, Brian writes: 对于 HHVM 和 PHP 7 的对比没看出来有什么,只看到 worldpress 的性能差的到家了。
Related posts:
Copyright © 2010 风雪之隅 版权所有, 转载务必注明. 该Feed只供个人使用, 禁止未注明的转载或商业应用. 非法应用的, 一切法律后果自负. 如有问题, 可发E-mail至my at laruence.com.(Digital Fingerprint: 73540ba0a1738d7d07d4b6038d5615e2)Related Posts: