web-dev-qa-db-ja.com

NginxはApacheと比較してLinuxでパフォーマンスが優れていますか?

Apacheはスレッドに基づいており(新しい接続ごとに新しいスレッド)、nginxはプロセスに基づいているため(サーバーへの新しい接続ごとに新しいプロセス)、ApacheとNginxのパフォーマンスを比較します。したがって、Nginxはプロセスベースなのでパフォーマンスが向上します。ただし、スレッドの直接的な概念はなく、Linuxではスレッドはカーネルレベルでプロセスにマップされるため、Linuxにデプロイする場合は重要です。したがって、Linux上のApacheとNginxのパフォーマンスは同じであるはずですが、NginxはApacheよりも優れています。なぜですか?

2
user737498

まず第一に、プロセスフォークが一般的にスレッド化よりも効率的であるというのは真実ではありません。これは、OSカーネルがスレッド/プロセスを処理する方法に大きく依存します。

プロセスのフォークはUnixシステムでは簡単で効率的なタスクですが、Windowsではひどいことはよく知られています。つまり、Windowsではスレッドを使用する方がはるかに優れている可能性がありますが、Unixでは、スレッドがプロセスよりも多かれ少なかれ効率的であるとは限りません。

Apache 2.Xでは、プロセスの生成やスレッドプールの操作など、いくつかのモードで実行できます。

Apacheに対してnginxのベンチマークを行う多くのリソースがWeb上にあります。テストシナリオが異なるため、各ベンチマークの使用は制限されています。

  • サーバーの構成、特に。 Apacheサーバー
  • 対象となるワークロード、静的コンテンツと動的コンテンツなど。
  • ベンチマークの関心:全体的なスループット、応答時間、応答時間の変動

残された最善のオプションは、シナリオを使用して、サーバー上で独自のベンチマークを設計することです。この質問も参照してください: https://stackoverflow.com/questions/2528266/how-to-benchmark-Apache-nginx-setup

12
ypnos

あなたはおそらくあまり気にしないでしょう。

事例証拠は、接続されたクライアントがあまり機能していない場合(キープアライブ、遅い要求など)、Nginxの方がメモリ効率が高いことを示しています。これは、同じマシンでより多くのアイドル接続を処理できることを意味します。これは、一部の種類のWebサーバーで役立ちます。

したがって、すべてのクライアントが超高速、超ビジー、低遅延リンク上にある場合(非常に巧妙な負荷テストシステムを考えてみてください)、Apacheは非常にうまくいく可能性があります。しかし、実際のインターネットと実際のクライアントを組み合わせると、Nginxの利点がわかります。

Nginxはスレッドを予約しませんまたは接続されたクライアントごとにプロセス-非同期で処理します。これにより、アイドル状態のクライアントが生成するオーバーヘッドが大幅に削減されます。

1
MarkR

nginxはプロセスに基づいています(サーバーへの新しい接続ごとに新しいプロセス)

これは正しくありません。 Nginxは、リクエストを処理するために多数のワーカープロセスを生成しますが、イベント駆動型であるため、各プロセスは一度に複数のリクエストを処理できます。これは、比較的適度な数のプロセスで膨大な数の同時リクエストを処理できるため、Apacheに比べて多くの利点の源です。

パフォーマンスに関しては、それは完全に状況に依存します。どちらのツールもすべての状況で優れています。

0
ZoFreX