PHP 7 表现
PHP 7 Performance
我试图重现这个基准测试,它将 PHP 7 与 Wordpress 服务器上的旧版本进行比较: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 的同一台服务器)。实测结果为:
- PHP7.0.0RC1 | PHP5.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/Whosebug/php7.html
- PHP 版本 5.6.12-0+deb8u1: http://simsso.de/downloads/Whosebug/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
根据您发布的 phpinfo
的输出,您的 PHP 7 未启用 opcache
,而 PHP 5 已启用。金额相差巨大。
我目前在 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 的巨大差异。尽管我们在网上看到了所有基准,但差异是远非显而易见。
不用说,那个项目,我会坚持PHP5版本。
我试图重现这个基准测试,它将 PHP 7 与 Wordpress 服务器上的旧版本进行比较: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 的同一台服务器)。实测结果为:
- PHP7.0.0RC1 | PHP5.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/Whosebug/php7.html
- PHP 版本 5.6.12-0+deb8u1: http://simsso.de/downloads/Whosebug/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
根据您发布的 phpinfo
的输出,您的 PHP 7 未启用 opcache
,而 PHP 5 已启用。金额相差巨大。
我目前在 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 的巨大差异。尽管我们在网上看到了所有基准,但差异是远非显而易见。
不用说,那个项目,我会坚持PHP5版本。