技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> PHP --> PHP7 VS HHVM (WordPress)

PHP7 VS HHVM (WordPress)

浏览:2544次  出处信息

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

但是呢, 总是有人问…

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

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

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

机器配置:

  1. CPU: 4 X Intel(R) Xeon(R) CPU           E5410  @ 2.33GHz

  2. Mem: 16G


环境配置:

  1. Nginx + PHP-FPM

  2. Nginx + HHVM


软件版本:

  1. PHP7 - 79354ba6d0d6a1a4596f9ac66ee9bc3a34ed972b

  2. HHVM-3.2.0


HHVM的配置:

  1. $ cat /etc/hhvm/server.ini

  2. ; php options


  3. pid = /var/run/hhvm/pid


  4. ; hhvm specific


  5. hhvm.server.host = 127.0.0.1

  6. hhvm.server.port = 9000

  7. hhvm.server.type = fastcgi

  8. ;hhvm.server.file_socket = /var/run/hhvm/hhvm.sock

  9. hhvm.server.default_document = index.php

  10. hhvm.log.level = Error

  11. hhvm.log.always_log_unhandled_exceptions = true

  12. hhvm.log.runtime_error_reporting_level = 8191

  13. hhvm.log.use_log_file = true

  14. hhvm.log.file = /var/run/hhvm/error.log

  15. hhvm.repo.central.path = /var/run/hhvm/hhvm.hhbc

  16. hhvm.mysql.typed_results = false

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

  1. php-fpm.conf:

  2. pm = static

  3. pm.max_children = 4


  4. php.ini (opcache):

  5. zend_extension=opcache.so

  6. opcache.enable=1

  7. opcache.enable_cli=1


  8. opcache.memory_consumption=128

  9. opcache.interned_strings_buffer=8

  10. ;opcache.max_accelerated_files=4000

  11. opcache.validate_timestamps=0

  12. opcache.revalidate_freq=60

  13. opcache.save_comments=0

  14. opcache.fast_shutdown=1

  15. opcache.enable_file_override=1

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

视频:




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

PHP7:

  1. Concurrency Level:      100

  2. Time taken for tests:   38.726 seconds

  3. Complete requests:      10000

  4. Failed requests:        0

  5. Write errors:           0

  6. Total transferred:      89290000 bytes

  7. HTML transferred:       86900000 bytes

  8. Requests per second:    258.22 [#/sec] (mean)

  9. Time per request:       387.260 [ms] (mean)

  10. Time per request:       3.873 [ms] (mean, across all concurrent requests)

  11. Transfer rate:          2251.64 [Kbytes/sec] received

HHVM-3.2

  1. Document Path:          /wordpress/

  2. Document Length:        8690 bytes


  3. Concurrency Level:      100

  4. Time taken for tests:   43.296 seconds

  5. Complete requests:      10000

  6. Failed requests:        0

  7. Write errors:           0

  8. Total transferred:      89260000 bytes

  9. HTML transferred:       86900000 bytes

  10. Requests per second:    230.97 [#/sec] (mean)

  11. Time per request:       432.957 [ms] (mean)

  12. Time per request:       4.330 [ms] (mean, across all concurrent requests)

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


建议继续学习:

  1. 让PHP7达到最高性能的几个Tips    (阅读:2854)
  2. PHP7扩展开发之hello word    (阅读:2158)
  3. PHP扩展迁移为兼容PHP7记录    (阅读:1598)
  4. 白话PHP7扩展开发之创建对象    (阅读:1522)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:PHP优化杂烩
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1