PHP 7 性能

Posted

技术标签:

【中文标题】PHP 7 性能【英文标题】:PHP 7 Performance 【发布时间】:2015-11-26 11:58:30 【问题描述】:

我试图在 Wordpress 服务器上重现这个比较 php 7 和旧版本的基准:http://talks.php.net/oz15#/wpbench

我的配置几乎相同,服务器有 i7、SSD、16GB RAM 和 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 如果其他: 0.12 | 0.295

我已经上传了两个 phpinfo() 文件以防万一:

PHP 版本 7.0.0RC1:http://simsso.de/downloads/***/php7.html PHP 版本 5.6.12-0+deb8u1:http://simsso.de/downloads/***/php5.html

你知道为什么 PHP 7 在我使用 Wordpress 的测试中要慢得多吗?


启用 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

【问题讨论】:

您是否关闭了测试的会话支持?另外,你是否在安装了 nginx 和 php-fpm 的同一台机器上运行了siege 感谢您的回复!会话支持被禁用,Siege 正在本地网络中的另一台机器上运行。我还确保网络不是限制因素。 两个 php 版本的 php-fpm 配置是否相同?此外,似乎没有为您的 php 7 启用 opcache,而它是为 php 5 启用的。仅此一项就可以产生巨大的差异.. 感谢发布。每秒请求数很可能会更高,但我认为您对现在看到的结果相当满意。 我认为值得一提的是,Wordpress 在对“更快”版本的 PHP 进行基准测试方面也有过历史。 HHVM ~ 2-3 年前声称对大多数主要 PHP 5.2 框架的速度提高了 6 倍,但 Wordpress 的速度却不到 2 倍。仍然更快,但有点令人失望。 (抱歉,找不到参考) 【参考方案1】:

我目前在 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 秒过去了。

是的,更糟

仅供参考:

$ 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 时,我从未注意到 prod 与 apache 的巨大差异。尽管我们在网上看到了所有的基准,但差异并不明显。

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

【讨论】:

有人否决了我的评论,我应该发布视频来证明我说的话吗? ;-)【参考方案2】:

根据您发布的phpinfo 的输出,您的PHP 7 未启用opcache,而PHP 5 则启用了它。仅此一项就可以产生巨大的差异。

【讨论】:

将 Mjh 的答案从评论中发布为社区 wiki,因此可以将此问题标记为已解决。 @Simsso,如果它解决了您的问题,请接受此答案。

以上是关于PHP 7 性能的主要内容,如果未能解决你的问题,请参考以下文章

PHP5.6+7代码性能加速-开启Zend OPcache-优化CPU

php 7.0 新特性

PHP 8.1性能基准测试结果出炉,比7.0版本提升44%

php7使用xhprof测试php性能

PHP XMPP 机器人性能

PHP 7安装使用体验,升级PHP要谨慎