NginXとFast-CGIがApacheのmod_phpよりも高速なのはなぜですか?

最近、FastCGIを介してPHPを実行しているNginXは、mod_phpを使用したApacheよりも高速であると聞きました。 私はまた、人々がこの仮説を否定し、同意することを見てきました。 少しテストして、これらのシステムのパフォーマンスを調べてみましょう。



テスト用に、小さな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は依然として最適なソリューションです。



以下は、パフォーマンスを比較するためのグラフです。










All Articles