web-dev-qa-db-ja.com

Nginx対Apache-実際の使用状況の比較と統計はありますか?

新しいサーバーを試してみて、空白のキャンバスを見つめています。好きなものを何でも置けます。私はApacheに慣れていますが、nginxがApacheよりもはるかに多くのトラフィックを10、100倍、さらにそれ以上処理できる方法を聞き続けています。 「はるかに速い」というだけではありません。

記事を検索すると、Drupalとは無関係のものがたくさん見つかります。または、Drupal関連記事に遭遇した場合、それは1)設定方法を簡単に説明した誰かの設定ファイル、または2)「いいえ、だめです」 t nginxを使用し、PHP fcgid "を指定してApacheを使用しますが、その理由については説明がありません。

では、Drupalに関して言えば、ここの現実とは何でしょうか。

例として、この 2bits.com の記事に沿って何かを探しています。ここで著者は、Apache mod_php対Apacheとfcgidをかなり広範囲にわたって検討し、それぞれの長所と短所を比較検討して、現実世界への影響を示すためのケーススタディを提供しました。この記事には、どの方法が自分の状況に最適かという知識に基づいた決定を下すのに十分な情報があります。

その作者はmod_phpをfcgidと比較していますが、私はApacheとNginxで同じタイプの包括的で現実的な世界を探しています。

誰かがNginxに切り替えて、Apacheと比較した違いによって「打ちのめされ」ましたか?すでにAPC、Memcache、およびVarnishのような積極的なキャッシングを使用している高度に最適化された環境であっても、ApacheをNginxに変更する唯一の変数は、この新しい代替テクノロジーへの投資に値する十分な違いをもたらします?

このサーバーに接続するサイトは、月平均200万PVを受け取ります。 Cent OS 6を実行するLAMPスタック。8GIGSのRAMを搭載した4コアCPU。 MemcachedとAPCはミックスの一部になります。 Drupalインストールについては何も特別なことはありません。基本的に、約50モジュールのVanilla 7です。

45
blue928

厳密に言えば、これはあなたが求めている質問には答えません。とにかくそれが役に立てば幸いです。

Apache / Nginx / Lighttpd /その他のWebサーバー。どれを選ぶかは重要ですか?つまり、いいえです。

はるかに長い答え:

Ifであり、ifの場合のみ、非常に大きな割合のユーザーがログインしています。 Webサーバーのパフォーマンス。ユーザーが匿名である場合、理論的には、そのレイヤーでの最適化から導き出すことができるすべての違いは、リソースをよりキャッシュ可能にすることと比べると、見かけ上薄いです。 cssファイルに適切なキャッシュヘッダーがある場合、UAは2回目にそれらを要求しません。それは重要です。 Varnishまたは同様のソフトウェアソリューションでページをキャッシュできる場合、そのページを提供するにはハッシュルックアップを行い、RAMから直接大量のデータを返します。それは重要です。これらのシナリオの両方で、HTTPデーモンが関与することはなく、PHPは呼び出されません。 Drupalはブートストラップしません。大きなモジュールのセットをRAMにロードする必要はなく、時間のかかるデータベースクエリは実行されません。

ログインしたユーザーに対して、コールドキャッシュから複雑なページで全ページロードを実行する場合。 たくさんのことが起こっています。はい。Webサーバーは、着信要求の処理、いくつかのヘッダーの設定、および応答の返信に関与しています。しかし、かかる時間は、Drupalを完全に実行してbootstrapを実行し、その応答を出力する場合にも関係ありません。何百ものデータベースクエリが実行される可能性があります。 PHPの非常に複雑なロジックは、パーサーによって評価されます。多くのモジュールがRAMにロードされています。これらのいずれかのパフォーマンスを改善すると、パフォーマンスに深刻な貢献をする可能性が高くなります。

議論のために:あなたが他のすべてを最適化するパフォーマンスに多くの時間を費やしたとしましょう。

  1. [〜#〜] apc [〜#〜] (または Optimizer + )および最新かつ最速のバージョンのPHPを実行します。
  2. DBクエリはほとんどありません。
  3. PHPロジックが削減されました。
  4. Varnishでできることをキャッシュします。
  5. サイト全体を再構築して、クライアント側をたくさんキャッシュできるようにし、 ECMAScript で多くの重労働を行うことができます。

多くのログインユーザーがいて、上記のすべてに対処した場合は、おそらくパフォーマンスを調整するか、Webサーバーを置き換えることで違いを生むことができます。しかし、何を推測します。あなたのサイトはとても複雑で、特定のユーザーの使用パターンはuniqueです。一般的な答えはありません。ロードバランサーの背後にあるすべての異なるWebサーバーをセットアップし、シナリオの下でそれらの動作を確認する必要があります。

上記は、Webサーバーのパフォーマンスを最適化するために時間を費やすことは時間の悪用である可能性が高いという結論に論理的に到達する試みです。私は誰かに上記の穴を開けてもらいたいですが、おそらくそこから新しいことを学びます。 :)

その他の注意事項:

  1. DrupalConコペンハーゲン基調講演 、PHP作成者 Rasmus Lerdorf の間に、Nginx自身を使用してDrupalパフォーマンスのトピックについて話し、 「人々はいつもウェブサーバーについて私に尋ねます...それは本当に問題ではありません、ウェブサーバーはほとんど無関係です」。 (ビデオの大体26:30)
  2. Facebookは、PHPコードを「わずかに」100%高速化するために、Drupal自体よりも大幅に大きいコードベース Hiphop の記述に数え切れないほどの時間を費やしてきました。 $ wc -l $(find . -type f | grep -v "^\.git" | grep -v "^\.hphp/third_party") | sort -nr | head -n1でHiphopを調べたところ、1.512.481行のコードで構成されていることがわかりました。これは、PHPの速度を向上させるために行う非常に異常な作業です。これは、PHPの速度が彼らにとって非常に重要であるためだと思います。
  3. 優れたキャッシングは、Webサーバーのチューニングよりもはるかに大きな効果があると言ったでしょうか。
  4. Apache 2.4のリリースに伴い、 Jim Jagielskiは基本的に、Apache 2.4はイベントベースのサーバーよりも高速であると主張しています
  5. 私が注意したのは The Dream TeamによるDrupalのパフォーマンスとスケーラビリティ で、この質問だけが出てきました。どちらを選択するかに関するすべての回答は、パフォーマンスとは無関係でした。 「どちらがすでに設定方法を知っているか」、「どれが最も簡単なテクノロジースタックを構築できるようになるか」などが、他の選択肢よりも優先される理由の1つでした。パフォーマンスは入りませんでした.
60
Letharion

OK、この質問にはすでに回答していますが、私はもう一度ネクロマンシングを行っています。主に、これらの回答が意味をなさないという意味合いが好きではないためです。また、Web開発者として、私は情熱を持ってキャッシングを嫌っています。 。

Apacheとnginxの違いは、「要求を処理できる速さ」ではなく、同じ量のハードウェア(特に限られたリソースで)で処理できる要求の数です。これは多少異なります。

Apacheはプロセスベースのサーバーです。つまり、リクエストごとにプロセスをフォークします。 Nginxはイベントベースのサーバーです。つまり、プロセスやスレッドの代わりに(非同期)イベントループを使用します。

また、プロセスベースのサーバー(Apacheなど)はcan軽負荷で非同期のイベントベースのサーバー(nginxなど)とほぼ同等のパフォーマンスを発揮します。 、たとえば10'0000同時リクエストのようなより重い負荷の下では、nginxは数メガバイトのRAMのみを使用しますが、ApacheはWebサーバーのみに数百メガバイトを必要とします(Webアプリケーションは含まれません。全くそれを行うことができました。

したがって、負荷が大きいと、ApacheがRAMを大量に消費し、驚くほどパフォーマンスが大幅に低下することがわかります。

より重要なことに、より高いRAM消費量は、Apacheがnginxよりも同じハードウェアで少ないリクエストを処理できることを意味します。つまり、Apacheは同じ量のユーザーに対してより多くのハードウェアを必要とします。つまり、 nginxよりもApacheの方がTCO(総所有コスト)が高く、ROI(投資収益率)が低下します。

X同時接続で使用される合計メモリ(少ないほど良い)

Memory Usage

1セットのハードウェア上のX同時接続で1秒あたりに処理できる要求(より多い方が良い)

Requests per second

ソース:ApacheBench、作成者 dreamhost.com

this Digital Ocean writupも参照してください。
どうやら、それはApacheに選択した接続処理アーキテクチャに依存します。

32
Quandary

数か月前にApacheからNginx/PHP-FPMに切り替えました。

drupal Webサイトでいくつかのベンチマークを作成し、いくつかのユースケースをテストしました。1CPUおよび512 Mo RAMのVPSサーバーで

Drupal with cache only

Nginx

ab -n 100 -c 30 xxx
Server Software:        nginx
Document Path:          /
Document Length:        24902 bytes

Concurrency Level:      30
Time taken for tests:   2.775 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      2529500 bytes
HTML transferred:       2490200 bytes
Requests per second:    36.04 [#/sec] (mean)
Time per request:       832.394 [ms] (mean)
Time per request:       27.746 [ms] (mean, across all concurrent requests)
Transfer rate:          890.28 [Kbytes/sec] received


httperf --client=0/1 --server=xxx --port=80 --uri=/ --send-buffer=4096 --recv-buffer=16384 --num-conns=100 --num-calls=10
Maximum connect burst length: 1

Total: connections 100 requests 1000 replies 1000 test-duration 48.946 s

Connection rate: 2.0 conn/s (489.5 ms/conn, <=1 concurrent connections)
Connection time [ms]: min 470.6 avg 489.5 max 522.2 median 488.5 stddev 9.5
Connection time [ms]: connect 0.2
Connection length [replies/conn]: 10.000

Request rate: 20.4 req/s (48.9 ms/req)
Request size [B]: 74.0

Reply rate [replies/s]: min 20.0 avg 20.4 max 20.8 stddev 0.2 (9 samples)
Reply time [ms]: response 46.8 transfer 2.1
Reply size [B]: header 450.0 content 24902.0 footer 2.0 (total 25354.0)
Reply status: 1xx=0 2xx=1000 3xx=0 4xx=0 5xx=0

CPU time [s]: user 6.50 system 17.58 (user 13.3% system 35.9% total 49.2%)
Net I/O: 507.3 KB/s (4.2*10^6 bps)

Apache

ab -n 100 -c 30 xxx
Server Software:        Apache/2.2.16
Document Path:          /
Document Length:        24902 bytes

Concurrency Level:      30
Time taken for tests:   28.364 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      25346000 bytes
HTML transferred:       24902000 bytes
Requests per second:    35.26 [#/sec] (mean)
Time per request:       850.918 [ms] (mean)
Time per request:       28.364 [ms] (mean, across all concurrent requests)
Transfer rate:          872.66 [Kbytes/sec] received


httperf --client=0/1 --server=xxx --port=80 --uri=/ --send-buffer=4096 --recv-buffer=16384 --num-conns=100 --num-calls=10
Maximum connect burst length: 1

Total: connections 100 requests 1000 replies 1000 test-duration 52.261 s

Connection rate: 1.9 conn/s (522.6 ms/conn, <=1 concurrent connections)
Connection time [ms]: min 499.0 avg 522.6 max 591.0 median 518.5 stddev 19.4
Connection time [ms]: connect 0.6
Connection length [replies/conn]: 10.000

Request rate: 19.1 req/s (52.3 ms/req)
Request size [B]: 74.0

Reply rate [replies/s]: min 18.2 avg 19.2 max 19.6 stddev 0.5 (10 samples)
Reply time [ms]: response 46.9 transfer 5.3
Reply size [B]: header 453.0 content 24902.0 footer 2.0 (total 25357.0)
Reply status: 1xx=0 2xx=1000 3xx=0 4xx=0 5xx=0

CPU time [s]: user 6.80 system 18.88 (user 13.0% system 36.1% total 49.1%)
Net I/O: 475.2 KB/s (3.9*10^6 bps)

Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0

Drupal with cache and boost

Nginx

ab -n 10000 -c 30 xxx
Server Software:        nginx
Document Path:          /
Document Length:        25002 bytes

Concurrency Level:      30
Time taken for tests:   2.275 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      253780000 bytes
HTML transferred:       250020000 bytes
Requests per second:    4395.52 [#/sec] (mean)
Time per request:       6.825 [ms] (mean)
Time per request:       0.228 [ms] (mean, across all concurrent requests)
Transfer rate:          108934.95 [Kbytes/sec] received


httperf --client=0/1 --server=xxx --port=80 --uri=/ --send-buffer=4096 --recv-buffer=16384 --num-conns=1000 --num-calls=30
Maximum connect burst length: 1

Total: connections 1000 requests 30000 replies 30000 test-duration 5.971 s

Connection rate: 167.5 conn/s (6.0 ms/conn, <=1 concurrent connections)
Connection time [ms]: min 4.2 avg 6.0 max 13.0 median 4.5 stddev 2.6
Connection time [ms]: connect 0.1
Connection length [replies/conn]: 30.000

Request rate: 5024.0 req/s (0.2 ms/req)
Request size [B]: 74.0

Reply rate [replies/s]: min 5017.2 avg 5017.2 max 5017.2 stddev 0.0 (1 samples)
Reply time [ms]: response 0.2 transfer 0.0
Reply size [B]: header 405.0 content 25002.0 footer 0.0 (total 25407.0)
Reply status: 1xx=0 2xx=30000 3xx=0 4xx=0 5xx=0

CPU time [s]: user 0.79 system 2.56 (user 13.2% system 42.9% total 56.1%)
Net I/O: 125016.7 KB/s (1024.1*10^6 bps)

Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0

Apache

ab -n 1000 -c 30 xxxx
Server Software:        Apache/2.2.16
Document Path:          /
Document Length:        25002 bytes

Concurrency Level:      30
Time taken for tests:   0.753 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      25291000 bytes
HTML transferred:       25002000 bytes
Requests per second:    1327.92 [#/sec] (mean)
Time per request:       22.592 [ms] (mean)
Time per request:       0.753 [ms] (mean, across all concurrent requests)
Transfer rate:          32797.26 [Kbytes/sec] received


httperf --client=0/1 --server=xxx --port=80 --uri=/ --send-buffer=4096 --recv-buffer=16384 --num-conns=100 --num-calls=10
Maximum connect burst length: 1

Total: connections 100 requests 1000 replies 1000 test-duration 1.148 s

Connection rate: 87.1 conn/s (11.5 ms/conn, <=1 concurrent connections)
Connection time [ms]: min 6.2 avg 11.5 max 14.1 median 11.5 stddev 1.3
Connection time [ms]: connect 0.1
Connection length [replies/conn]: 10.000

Request rate: 870.8 req/s (1.1 ms/req)
Request size [B]: 74.0

Reply rate [replies/s]: min 0.0 avg 0.0 max 0.0 stddev 0.0 (0 samples)
Reply time [ms]: response 1.1 transfer 0.1
Reply size [B]: header 260.0 content 25002.0 footer 0.0 (total 25262.0)
Reply status: 1xx=0 2xx=1000 3xx=0 4xx=0 5xx=0

CPU time [s]: user 0.13 system 0.57 (user 11.1% system 49.5% total 60.6%)
Net I/O: 21544.9 KB/s (176.5*10^6 bps)

Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0

認証済みユーザーのベンチマーク(ページの読み込み)

Nginx

Page load times : 2.85 s

Apache

Page load times : 5.4 s

しかし、Nginxの力は キャッシュシステム です。

Drupalなしキャッシュシステムを有効にしたBoostおよびNginx

Server Software:        nginx
Document Path:          /
Document Length:        24902 bytes

Concurrency Level:      30
Time taken for tests:   2.437 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      252670000 bytes
HTML transferred:       249020000 bytes
Requests per second:    4103.34 [#/sec] (mean)
Time per request:       7.311 [ms] (mean)
Time per request:       0.244 [ms] (mean, across all concurrent requests)
Transfer rate:          101248.99 [Kbytes/sec] received


httperf --client=0/1 --server=xxx --port=80 --uri=/ --send-buffer=4096 --recv-buffer=16384 --num-conns=1000 --num-calls=30
Maximum connect burst length: 1

Total: connections 1000 requests 30000 replies 30000 test-duration 6.044 s

Connection rate: 165.5 conn/s (6.0 ms/conn, <=1 concurrent connections)
Connection time [ms]: min 4.2 avg 6.0 max 11.7 median 4.5 stddev 2.6
Connection time [ms]: connect 0.1
Connection length [replies/conn]: 30.000

Request rate: 4963.7 req/s (0.2 ms/req)
Request size [B]: 74.0

Reply rate [replies/s]: min 4970.1 avg 4970.1 max 4970.1 stddev 0.0 (1 samples)
Reply time [ms]: response 0.2 transfer 0.0
Reply size [B]: header 405.0 content 25002.0 footer 0.0 (total 25407.0)
Reply status: 1xx=0 2xx=30000 3xx=0 4xx=0 5xx=0

CPU time [s]: user 0.72 system 2.68 (user 12.0% system 44.3% total 56.3%)
Net I/O: 123516.8 KB/s (1011.8*10^6 bps)

Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0

perusioの設定 Nginx for Drupalを使用する必要があります

16
flocondetoile

これが パフォーマンステスト で、10台のWebサーバー/バリアント(Apache、Nginx、lighttpd、Lightspeed、Hiawatha、Cherokeeなど)を対象としています。テストのうち3つはDrupalに関連しています。

ハイアワサが全体として最良の選択かもしれないと思います。 full Drupal互換性 、セキュリティ(DoS、XSS、CSRF、SQLインジェクション防止)、およびNginxと同様の速度とフットプリントに重点を置いていると想定されています。

3つのDrupalテストの2つでは、HiawathaとNginxの両方がApacheの約150%を上回っていますが、Drupal静的テストでは、ApacheはNginxをわずかに上回っています。ハイアワサはパックを約10%最高にします。

私はこれらのテストのいずれかで私の帽子を掛けるつもりはありませんが、それはさまざまな使用状況でのパフォーマンスの大まかな見方を与えます。パフォーマンスだけを考慮すべきではないと思います。安定性とセキュリティがより重要な要素になる場合があります。

0
Hawkeye

ここ は、負荷テストの結果ですdrupalが同じハードウェアで実行されていますが、異なるWebで実行されています)サーバー(nginxおよびApache)

これがこのテストの結論です:

同じハードウェアリソースを使用する大規模なトラフィックでは、nginxはApacheよりもパフォーマンスが優れています。

0
wathmal