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は依然として最適なソリューションです。

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

Source: https://habr.com/ru/post/J226875/


All Articles