msgbartop
PHP语言, PHP扩展, Zend引擎相关的研究,技术,新闻分享 – 左手代码 右手诗
msgbarbottom

18 Dec 14 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的新语法都叫做差异? 那是一回事么?


分享到:



Related Posts:

Tags: ,

74 Responses to “PHP7 VS HHVM (WordPress)”

Pages: [2] 1 » Show All

  1. 歪麦 |

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

  2. 雅思学习 |

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

  3. taibao |

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

  4. 2 |

    2

  5. Mingxiu |

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

  6. Anonymous |

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

  7. margee |

    很期待哟

  8. 27joy.CN耕耘网 |

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

  9. Brian |

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

  10. 橘子 |

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

  11. 北京SEO |

    博客不错哦

  12. lonely |

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

    请教 Laruence 望答复

  13. heyuejan |

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

  14. Julien BENOIT |

    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.

  15. williamLu |

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

  16. booters |

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

  17. Anonymous |

    我希望PHP7有强类型约束。

  18. php7的初体验 | 老陈是一个普通的文艺二逼青年 |

    [...] 附: 新浪鸟哥做的php7对应hhvm的测试比较 [...]

  19. Laruence |

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

  20. 烟花易冷 |

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

  21. php性能php7-vs-hhvm | 温柔的大海 |

    [...] PHP7 VS HHVM (WordPress) [...]

  22. tyftyftyf |

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

  23. 雪候鸟 |

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

  24. tyftyftyf |

    给博主提几点注意噢:

    HHVM在那个配置下仍然会每个请求都检查文件是否变更,而PHP7已经用了opcache.validate_timestamps=0关闭了这种检查。HHVM用Repo.Authoritative关闭检查之后性能又能提示20%左右。

    HHVM会把字节码存到本地数据库,所以重启之后不需要重新编译。PHP则每次重启都得填充OpCache。(这里是对bytecode的处理作比较,HHVM还会把热路径进一步编译成机器码)

    其他方面的评测还是非常客观的。支持PHP,支持HHVM,期待PHP7!

Pages: [2] 1 » Show All

Leave a Reply

*