PHP 7性能

24

我尝试复现了这个基准测试,它比较了在一个WordPress服务器上使用PHP 7和旧版本的性能:http://talks.php.net/oz15#/wpbench

我的配置几乎相同,服务器配备了i7处理器,固态硬盘,16GB内存和debian操作系统。服务器软件是nginx。令人惊讶的是,我的测试结果与上面链接的结果有很大不同。

在我的测试中,Siege (https://www.joedog.org/siege-home/) 输出如下:

对于 PHP 7.0.0RC1:

siege -c100 -r100 http://10.22.255.133/wordpress/
** SIEGE 3.0.8
** Preparing 100 concurrent users for battle.
The server is now under siege..      done.

Transactions:                  10000 hits
Availability:                  100.00 %
Elapsed time:                  131.61 secs
Data transferred:              95.77 MB
Response time:                 0.75 secs
Transaction rate:              75.98 trans/sec
Throughput:                    0.73 MB/sec
Concurrency:                   56.98
Successful transactions:       10000
Failed transactions:           0
Longest transaction:           1.01
Shortest transaction:          0.04

对于 PHP 5.6.12 版本:

siege -c100 -r100 http://10.22.255.133/wordpress/
** SIEGE 3.0.8
** Preparing 100 concurrent users for battle.
The server is now under siege..      done.

Transactions:                  10000 hits
Availability:                  100.00 %
Elapsed time:                  63.41 secs
Data transferred:              95.77 MB
Response time:                 0.03 secs
Transaction rate:              157.70 trans/sec
Throughput:                    1.51 MB/sec
Concurrency:                   4.45
Successful transactions:       10000
Failed transactions:           0
Longest transaction:           0.63
Shortest transaction:          0.01

观察交易速率,可以看出PHP 5大约比PHP 7快两倍。我不敢相信。

另一个有趣的事实是,在运行此基准测试(http://www.php-benchmark-script.com/)时,PHP 7的结果约为PHP 5的3倍(当然在同一台服务器上,我也测试了WordPress)。 测量结果如下:

  • PHP 7.0.0RC1 | PHP 5.5.28
  • 数学: 0.201 | 0.683
  • 字符串操作: 0.271 | 0.77
  • 循环: 0.166 | 0.486
  • If Else: 0.12 | 0.295

如果需要帮助,我已上传了phpinfo()文件:

你有任何想法吗?为什么我的WordPress测试中PHP 7要慢那么多?


启用opcache后,PHP 7实际上比PHP 5快两倍。感谢Mjh的提示!

我对一个随机填充的WordPress服务器进行了以下测量。

现在Siege对PHP 7.0.0RC1输出如下:

Transactions:                  10000 hits
Availability:                 100.00 %
Elapsed time:                  62.14 secs
Data transferred:             604.20 MB
Response time:                  0.02 secs
Transaction rate:             160.93 trans/sec
Throughput:                     9.72 MB/sec
Concurrency:                    3.77
Successful transactions:       10000
Failed transactions:               0
Longest transaction:            0.41
Shortest transaction:           0.01 

还有PHP 5.6.12

siege -c100 -r100 http://10.22.255.133/wordpress/
** SIEGE 3.0.8
** Preparing 100 concurrent users for battle.
The server is now under siege..      done.

Transactions:                 10000 hits
Availability:                 100.00 %
Elapsed time:                 119.98 secs
Data transferred:             604.20 MB
Response time:                0.60 secs
Transaction rate:             83.35 trans/sec
Throughput:                   5.04 MB/sec
Concurrency:                  49.86
Successful transactions:      10000
Failed transactions:          0
Longest transaction:          4.06
Shortest transaction:         0.04

2
你是否关闭了测试中的会话支持?另外,你是否在安装了nginx和php-fpm的同一台机器上运行了siege - Mjh
5
php-fpm 的配置在两个 PHP 版本中是否相同?此外,似乎您的 PHP 7 没有启用 Opcache,而 PHP 5 则已启用。这可能会导致巨大的差异。 - Mjh
1
谢谢您的发布。您很可能可以提高每秒请求次数,但我想您现在看到的结果已经相当不错了。 - Mjh
1
我认为值得注意的是,WordPress在基准测试“更快”的PHP版本方面有历史记录。大约2-3年前,HHVM声称相对于大多数主要的PHP 5.2框架,速度提升了6倍,但是WordPress仅快了不到2倍,这令人有点失望。(抱歉,找不到参考资料) - DanielM
Opcache配置已被接受为答案 - 因此可能是问题所在。现在基准测试的结果如何? - symcbean
显示剩余4条评论
2个回答

21
根据您发布的phpinfo输出,您的PHP 7未启用opcache,而对于PHP 5已启用。仅此一项就可能导致巨大的差异。

将Mjh在评论中的答案发布为社区维基,以便将此问题标记为已解决。@Simsso,请接受此答案,如果它解决了您的问题。 - Quentin Skousen

-2

我目前在CLI端也有同样惊人的结果。

我的一个旧项目使用PHING构建。它曾经在PHP 5.3上运行,然后是PHP 5.6。 我尝试使用PHP 7并注意到了巨大的差异。所以我决定计时脚本执行时间。

请注意,这是一个真实的项目,在构建过程中处理了数千个文件。

使用PHP 5.3.29构建: 经过3分44秒。

使用PHP 7.2.11构建: 经过11分41秒。

我注意到CLI没有激活opcache,以下是使用opcache的结果:

使用PHP 7.2.11 + opcache构建: 经过12分18秒。

是的,更糟糕了

FYI:

$ php --info |grep opcache
opcache.blacklist_filename => no value => no value
opcache.consistency_checks => 0 => 0
opcache.dups_fix => Off => Off
opcache.enable => On => On
opcache.enable_cli => On => On
opcache.enable_file_override => Off => Off
opcache.error_log => no value => no value
opcache.file_cache => no value => no value
opcache.file_cache_consistency_checks => 1 => 1
opcache.file_cache_only => 0 => 0
opcache.file_update_protection => 2 => 2
opcache.force_restart_timeout => 180 => 180
opcache.huge_code_pages => Off => Off
opcache.inherited_hack => On => On
opcache.interned_strings_buffer => 8 => 8
opcache.lockfile_path => /tmp => /tmp
opcache.log_verbosity_level => 1 => 1
opcache.max_accelerated_files => 10000 => 10000
opcache.max_file_size => 0 => 0
opcache.max_wasted_percentage => 5 => 5
opcache.memory_consumption => 128 => 128
opcache.opt_debug_level => 0 => 0
opcache.optimization_level => 0x7FFFBFFF => 0x7FFFBFFF
opcache.preferred_memory_model => no value => no value
opcache.protect_memory => 0 => 0
opcache.restrict_api => no value => no value
opcache.revalidate_freq => 2 => 2
opcache.revalidate_path => Off => Off
opcache.save_comments => 1 => 1
opcache.use_cwd => On => On
opcache.validate_permission => Off => Off
opcache.validate_root => Off => Off
opcache.validate_timestamps => On => On

顺便说一句,当我从PHP 5切换到PHP 7时,我在生产环境中并没有注意到巨大的差异。尽管我们在网上看到了所有基准测试,但差异远非显而易见。

不用说,对于那个项目,我将坚持使用PHP 5版本。


有人给我的评论点了踩,我应该发一个视频来证明我说的话吗?;-) - Nadir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接