テスト用に、小さなHello worldスクリプトを作成しました。 もっと複雑なものを選択しなかったのはなぜですか? 答えは簡単です。PHPインタープリターのパフォーマンスに大きな違いはないはずです。 では、なぜ完全に空白のページを作成しなかったのですか? 実際、双方向のデータ転送をテストしたかったのです。 目標は、PHPだけでなく、Webサーバー全体の速度をテストすることです。
基本的なテストでは、次の結果が得られます。
mod_phpを使用したApache
Total transferred: 3470000 bytes
HTML transferred: 120000 bytes
Requests per second: 2395.73 [#/sec] (mean)
Time per request: 4.174 [ms] (mean)
Time per request: 0.417 [ms] (mean, across all concurrent requests)
Transfer rate: 811.67 [Kbytes/sec] received
PHP-FPMを使用したNginX
Total transferred: 1590000 bytes
HTML transferred: 120000 bytes
Requests per second: 5166.39 [#/sec] (mean)
Time per request: 1.936 [ms] (mean)
Time per request: 0.194 [ms] (mean, across all concurrent requests)
Transfer rate: 801.82 [Kbytes/sec] received
Apacheは、Nginxとは異なり、1秒あたり2400のリクエストを処理できました。 彼は5200件のリクエストを処理しました。 こんなにたくさん見たことがありません。 Apacheで-c -fを使用して同じリクエストを実行し、この違いの理由を見つけました。 -cはシステム要求の時間を表示し、-fはブランチに従います。 最初の10行の結果はどうなりますか?
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
33.65 0.042063 4 10003 getcwd
16.10 0.020127 2 10001 writev
16.00 0.019994 2 10001 shutdown
10.54 0.013179 0 51836 40118 open
9.01 0.011263 1 20008 semop
5.22 0.006522 0 54507 10002 read
2.53 0.003158 0 10024 write
1.91 0.002386 0 88260 66483 close
1.57 0.001959 245 8 clone
1.16 0.001455 0 54832 384 stat64
getcwd? しかし、なぜですか? AllowOverwrite(.htaccess)をアクティブにしたことを思い出した後。 この機能を無効にした後、同じテストを実行しました。
Total transferred: 3470000 bytes
HTML transferred: 120000 bytes
Requests per second: 5352.41 [#/sec] (mean)
Time per request: 1.868 [ms] (mean)
Time per request: 0.187 [ms] (mean, across all concurrent requests)
Transfer rate: 1813.40 [Kbytes/sec] received
5352のリクエストが処理されたため、ApacheはNginXよりも優れていました。 しかし、転送されるデータの量が増えるとどうなりますか? 約10万のコンテンツを作成し、再試行しました。
アパッチ
Total transferred: 1051720000 bytes
HTML transferred: 1048570000 bytes
Requests per second: 2470.24 [#/sec] (mean)
Time per request: 4.048 [ms] (mean)
Time per request: 0.405 [ms] (mean, across all concurrent requests)
Transfer rate: 253710.79 [Kbytes/sec] received
Nginx
Total transferred: 1050040000 bytes
HTML transferred: 1048570000 bytes
Requests per second: 2111.08 [#/sec] (mean)
Time per request: 4.737 [ms] (mean)
Time per request: 0.474 [ms] (mean, across all concurrent requests)
Transfer rate: 216476.53 [Kbytes/sec] received
今回は違いがより顕著でした。 いくつかの変化が感じられています。 PHPはApache mod_phpに組み込まれており、高速化されるはずです。 サーバーでPHPのみが実行されている場合、これが最高のパフォーマンスのソリューションになります。
CSS、JS、画像などの異なる言語を使用する場合は、NginXがより適しています。 そのパフォーマンスは高くなりますが、PHPは速くなりません。 また、DDoSに対する保護の点でもより信頼性が高くなりますが、CDNは依然として最適なソリューションです。
以下は、パフォーマンスを比較するためのグラフです。
