Press "Enter" to skip to content

PHP7 VS HHVM (WordPress)

其实我已经在很多场合说过, 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的新语法都叫做差异? 那是一回事么?

83 Comments

  1. candy crush saga
    candy crush saga April 6, 2021

    目前我仍然使用php 5.6,可以和我分享php 7的特殊功能吗? 谢谢!

  2. tobin
    tobin August 29, 2018

    4核16G
    fpm.max_children = 4
    我的问题是:
    max_children只能配置到核数一样的数字吗?16G 内存那不是没什么用处?只要4G 就可以?
    16G 内存能不能放max_children到500?

  3. 鳄鱼皮钱包
    鳄鱼皮钱包 December 7, 2017

    虽然自己也是学计算机网络的,当是还是看的有点吃力

  4. 雅思预测
    雅思预测 May 3, 2017

    开启Hugepage后,WP的性能反而有些降低,不知道为什么。

  5. 歪麦
    歪麦 October 17, 2016

    即使是现在,依然很相信PHP7的能力!!

  6. 雅思学习
    雅思学习 September 27, 2016

    相比于HVMM,PHP7的兼容性相对要好一些,希望PHP7能够发展的更好,也感谢开源社区的无私贡献。

  7. taibao
    taibao April 12, 2016

    php7性能真心不错,php7的前途越来越光明了。

  8. 2
    2 March 25, 2016

    2

  9. Mingxiu
    Mingxiu December 5, 2015

    @Anonymous, “多进程模型也会带来无法在运行时加载大型词典的弊端, “呵呵了, 你知道共享内存么? 你知道共享内存可以加锁么? 你知道这个模型下经典的0/1切换方案么?

  10. Anonymous
    Anonymous December 3, 2015

    php7 即便性能与 hhvm 相当,多进程模型也会带来无法在运行时加载大型词典的弊端,真实的业务场景不是总能做到 share nothing 的。
    同理,多线程的 crash 也未必是多大运维压力,如果你有 1000 台 server,面临的完全是另一个层面的问题。
    某公司在优化方面做的功夫是你看不到的,请不要因为管过小小微博就妄言需要几十万台 server 才能驱动的服务。

  11. margee
    margee September 16, 2015

    很期待哟

  12. 27joy.CN耕耘网
    27joy.CN耕耘网 July 17, 2015

    相信PHP7,对于其他复杂的东西,真心不怎么想学,浪费时间,还是PHP简单易用

  13. Brian
    Brian June 12, 2015

    对于 HHVM 和 PHP 7 的对比没看出来有什么,只看到 worldpress 的性能差的到家了。

  14. 橘子
    橘子 June 10, 2015

    其实我觉得这也不尽公平。
    PHP7目前还没有支持较广的稳定版(相对主流CMS而言。
    而HHVM已经能较好的支持主流CMS

  15. lonely
    lonely April 5, 2015

    class a{
    public static function s(){
    //这里有没有办法判断是静态调用还是非静态调用,
    //如果可以判断.怎么来获取调用的对象呢?
    }
    };
    $sss=new a();
    $sss->s();
    a::s();
    请教 Laruence 望答复

  16. heyuejan
    heyuejan March 27, 2015

    wordpress 的压测没有做过。wordpress 的QPS因该跟DB也有一点关系吧,
    我们压测一般是用纯CI框架压的,php5.4 四核 2.3 虚拟机
    QPS大概是 一千四左右。

  17. Julien BENOIT
    Julien BENOIT February 24, 2015

    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.

  18. williamLu
    williamLu February 24, 2015

    期待正式版本发布。。。
    感谢付出。。

  19. booters
    booters February 15, 2015

    Thanks for sharing your thoughts. I really appreciate your efforts
    and I will be waiting for your further post thanks once
    again.

  20. Anonymous
    Anonymous February 12, 2015

    我希望PHP7有强类型约束。

  21. Laruence
    Laruence January 27, 2015

    @tyftyftyf 恩, 你是对的, 我搞错了, 我刚刚重新跑了一下测试, 实际上几乎没有差别(不稳定的, 能差了2个qps) , 考虑更新视频太麻烦, 对结论的影响也不大, 我就不修改了 . :), thanks

  22. 烟花易冷
    烟花易冷 January 24, 2015

    作为一名wordpressaihaozhe,guolaizhic一下大phpng,博主加油

  23. tyftyftyf
    tyftyftyf January 13, 2015

    @雪候鸟,博主说的有道理,不过关于文件检查那块,我看http://php.net/manual/en/opcache.configuration.php#ini.opcache.validate-timestamps讲的是,opcache.validate_timestamps=0的时候,opcache.revalidate_freq会被忽略,所以net effect还是永远都不检查。不是么?:p

  24. 雪候鸟
    雪候鸟 January 10, 2015

    @tyftyftyf 你理解错了, 检查文件变更的是这个: opcache.revalidate_freq=60 表示60s检查一次. 而HHVM如果开启repo模式, 那意思是什么呢? 就是离线编译然后上线, 这个已经不是我们要考虑的方式了. Anyway, 恩.. 其实我只是想说的是性能相当. 🙂

  25. tyftyftyf
    tyftyftyf January 10, 2015

    给博主提几点注意噢:
    HHVM在那个配置下仍然会每个请求都检查文件是否变更,而PHP7已经用了opcache.validate_timestamps=0关闭了这种检查。HHVM用Repo.Authoritative关闭检查之后性能又能提示20%左右。
    HHVM会把字节码存到本地数据库,所以重启之后不需要重新编译。PHP则每次重启都得填充OpCache。(这里是对bytecode的处理作比较,HHVM还会把热路径进一步编译成机器码)
    其他方面的评测还是非常客观的。支持PHP,支持HHVM,期待PHP7!

  26. flash866
    flash866 January 9, 2015

    “另外它采用JIT, 那么意味着, 重启以后要预热, 没有预热的情况下, 性能较为糟糕。”—-完全看不懂啊!!什么是“预热”??鸟哥普及一下吧、

  27. liuxd
    liuxd January 6, 2015

    额,直接PHP7了,而且明年10月份就发布。。。
    意识是PHP6被跳过了?

  28. eechen
    eechen January 4, 2015

    http://www.cnblogs.com/hxdoit/p/4155436.html
    php-fpm正在生成页面时,浏览器刷新后,php-fpm并不会退出.浏览器关闭请求后,nginx会通知到php-fpm,但php-fpm忽略了这个通知,继续处理,直到发送处理结果时,才知道了连接已经被关闭.我想在这里,php-fpm在连接的处理上是不是还存在可以优化的空间,也就是nginx通知php-fpm连接结束时,php-fpm应该退出而不是继续执行.

  29. Andrew
    Andrew January 2, 2015

    学习下

  30. 新一
    新一 December 21, 2014

    真心希望早点发布。这样子我们可以应用了。

  31. Fwolf
    Fwolf December 20, 2014

    5.4 都还没完全普及,7 就要出了啊。。。好快,
    估计到时候直接把 6 跳过去?

  32. Ruchee
    Ruchee December 20, 2014

    期待

  33. kn007
    kn007 December 19, 2014

    明年10月,如果能再早就好了!

  34. Winsen
    Winsen December 19, 2014

    看得出来,鸟哥很火大…………

  35. chenjie
    chenjie December 19, 2014

    支持,期待7。评测就应该像鸟哥这样很客观

  36. ohmygirl
    ohmygirl December 19, 2014

    鸟哥好久不写博客了,微博上几次留言的问题也没有回复。

  37. skyforce
    skyforce December 19, 2014

    期待 PHP 7 的到来,向鸟哥努力学习!

  38. php360
    php360 December 19, 2014

    支持一下,向您学习

  39. php360
    php360 December 19, 2014

    支持

  40. tlanyan
    tlanyan December 18, 2014

    别在黑我PHP了

  41. alan
    alan December 18, 2014

    别再黑我大PHP了

  42. hilojack
    hilojack December 18, 2014

    期待,希望php 更强更好!

  43. yearnfar
    yearnfar December 18, 2014

    HHVM编译安装太tm蛋疼了

  44. 1
    1 December 18, 2014

    顶 php是最好的语言

  45. doubear
    doubear December 18, 2014

    PHP一定会是世界上最好的语言,我认真的!!

  46. 叫我康哥
    叫我康哥 December 18, 2014

    我只想知道到时候我从5.4升级到7会不会出很多bug

  47. Demon
    Demon December 18, 2014

    打倒hhvm, php7雄起!

  48. moxian
    moxian December 18, 2014

    php是最好的语言!
    别再黑我大PHP了!
    期待PHP!

  49. moxian
    moxian December 18, 2014

    别在黑我大PHP了!
    期待php7

  50. king
    king December 18, 2014

    HHVM在处理静态内容方面变现很差
    期待PHP7

  51. mot
    mot December 18, 2014

    PHP7的正式版向下兼容5.3+吗

  52. Anonymous
    Anonymous December 18, 2014

    更加爱python和scala 哈哈哈哈哈。目前在用java = =!

  53. westup
    westup December 18, 2014

    php必须是最好的语言,我认真地

  54. jan
    jan December 18, 2014

    php是世界上最好的语言

  55. Anonymous
    Anonymous December 18, 2014

    顶 php是最好的语言

  56. star001007
    star001007 December 18, 2014

    别在黑我大PHP了

  57. fantiq
    fantiq December 18, 2014

    不能忍

  58. isaced
    isaced December 18, 2014

    期待PHP7…

  59. 花生
    花生 December 18, 2014

    赞一个,别再黑我大PHP了。。哈哈

  60. Monster
    Monster December 18, 2014

    都在努力提升性能,求不黑php!@xxx?

  61. cheungzee
    cheungzee December 18, 2014

    php是最好的语言

  62. oboodo
    oboodo December 18, 2014

    板凳

  63. barbery
    barbery December 18, 2014

    大赞…非常期待PHP7啊啊啊啊

  64. goodboy
    goodboy December 18, 2014

    支持一下,看好PHP7

  65. foyon
    foyon December 18, 2014

    顶鸟哥

  66. walu
    walu December 18, 2014

    这发博客频率也太低了…哈哈

  67. Hassan
    Hassan December 18, 2014

    期待PHP7…

  68. royee
    royee December 18, 2014

    沙发。。。

Comments are closed.