Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon multi_acceptをオンまたはオフに設定することの意味は何ですか


multi_acceptをオンまたはオフに設定することの意味は何ですか


nginxの `multi_accept`指令は、ワーカープロセスが新しい着信接続を受け入れる方法を制御します。その設定「オン」または「オフ」は、サーバーレベルでクライアント接続を処理することに異なるパフォーマンスの影響を持っています。以下は、「Multi_accept」を「オン」または「オフ」に設定し、その動作、パフォーマンス効果、実用的な考慮事項をカバーする意味の詳細な説明です。

###定義とデフォルトの動作
`multi_accept`ディレクティブは、nginx構成ファイルの「イベント」コンテキストで構成されています。ワーカープロセスが一度に1つの新しい接続を受け入れる( `multi_accept off」を受け入れるか、聞くキューで利用可能なすべての新しい接続を一度に受け入れるか(` multi_accept on`)かどうかを判断します。この指令のデフォルト設定は「オフ」です。

「Multi_accept」が「オフ」に設定されると、ワーカープロセスは、新しい接続を1つずつ受け入れます。 「オン」に設定されている場合、ワーカーは、新しい接続イベントについて通知されると、利用可能なすべての新しい接続を一度に受け入れます。この通知は、Nginxが使用する基礎となるイベント処理メカニズムに基づいて行われます。これは、オペレーティングシステムによって異なりますが、一般にepoll、kqueue、または同様のスケーラブルなイベント通知システムが含まれます。

Multi_acceptがオフに設定された意味

- 単一接続の受け入れ:労働者は、通知イベントごとに1つの接続のみを受け入れます。このアプローチは、追加の負荷スパイクなしで受け入れられた各接続を順に処理できるため、処理を簡素化します。
-CPU負荷分布:労働者は一度に1つずつ接続を受け入れるため、労働者が一度に複数の接続の受け入れに圧倒されないため、CPU負荷はより均等に広がる傾向があります。
- 雷の雷のリスクの低下:この設定は、「雷の群れ」の問題を回避する傾向があります。複数の労働者が同時に目を覚ますが、接続を処理するのは1つだけで、CPUサイクルがコンテキストの切り替えで浪費されます。
- レイテンシコントロール:一度に1つの接続を受け入れると、聞くキューがよりゆっくりと排出されるため、重い負荷の下での遅延がわずかに増加する可能性があります。
- 潜在的なスループットの制限:非常に高い接続率の下で、接続を1つずつ受け入れると、作業者が到着時に入ってくる接続を迅速に処理できないため、スループットが低くなる可能性があります。
- リソース効率:この設定は、システムリソースをより保守的に使用する傾向があります。これは、同時接続の高い負荷が発生しないサーバーにとって有益です。

Multi_Acceptの意味ONに設定されています

- バッチ接続の受け入れ:労働者は、通知の直後に聞くキューで待機するすべての着信接続を受け入れます。これにより、ワーカーがサイクルごとにプロセスする接続の数が大幅に増加する可能性があります。
- スループットの高い:この設定は、多くの接続が短いバーストに到着する重い負荷条件下でスループットを改善し、労働者がより多くの接続を迅速に処理できるようにすることができます。
- 労働者を過負荷にするリスク:すべてのキューに囲まれた接続を一度に受け入れると、入ってくる接続が労働者の処理能力を超え、パフォーマンスの低下につながる可能性がある場合、労働者が過負荷になる可能性があります。
- CPUの覚醒と負荷スパイクの増加:すべての接続が一度に受け入れられ、CPU消費パターンが爆発する可能性があるため、労働者はCPU使用のスパイクを経験する可能性があります。
- 接続または遅延のドロップの可能性:受け入れられている接続の数が、ワーカーが効率的に処理できる最大接続接続を超える場合(「Worker_Connections」またはシステム制限に基づく)、一部の接続が遅延または削除される場合があります。
- 一貫した高負荷環境に役立つ:サーバーが大量の同時接続を一貫して処理する場合、この設定は、接続を個別に受け入れるオーバーヘッドを減らし、応答速度を高めるのに役立ちます。

###他の設定との対話
-Accept_mutex:デフォルトで有効にされるこの指令は、「雷の群れ」の問題を回避するために、ワーカープロセスが接続を順番に受け入れる方法を制御します。 「Accept_mutex」をオンにすると、労働者は接続を一度に1つずつ受け入れ、より整然とした接続処理のために「multi_accept off」設定を補完します。
- 「Accept_mutex」がオフになると、すべての労働者が新しい接続で目を覚ますが、特に「multi_accept」もオフになっている場合、非効率的なCPU使用を引き起こす可能性がある潜在的には、それらを処理するのは1つだけです。
-worker_connections and worker_processes:これらは、各ワーカーとサーバー全体が処理できる同時接続接続の数を決定し、 `multi_accept`の影響に影響します。 `multi_accept`がオンになり、接続流入が組み合わせた容量を超えると、労働者が過負荷になる可能性があります。
- イベントポーリングメカニズム:kqueueが新しい接続の正確な数を報告し、バッチなしでより良い制御を可能にするため、一部のシステムでkqueueが使用される場合、multi_acceptディレクティブは無視されます。

###パフォーマンスに関する考慮事項
- 「multi_accept`( `on」)を有効にすることは、サーバーが多数の着信接続の一定のストリームを経験する場合、作業者が多くの接続を迅速に受け入れて処理できるため、有益です。
- それを無効にする(「オフ」)は、接続の解約が少ない環境に適しています。ここでは、労働者が圧倒され、無駄なCPUサイクルを減らします。
- 「worker_connections」とCPUリソースを適切に調整せずに接続率が高い `multi_accept`を使用すると、リソースの疲労と遅延が増加する可能性があります。
- SSLハンドシェイクなど、各接続の操作をブロックするワークロードは、ボトルネックを避けるために、適切な「Multi_accept」設定と組み合わせた複数のワーカーの恩恵を受けることができます。

###ユースケースと推奨事項
- 交通量の多いAPIまたはWebサーバー:「Multi_accept」を回すと、アクティビティのエピソードが発生するため、すべての保留中の接続を受け入れることにより、サーバーリソースをより適切に利用できるようになり、高い並行性シナリオでのレイテンシーが減少します。
- 低から中程度のトラフィックまたは開発環境:「multi_accept」をオフにすることは、安定したCPU使用とより単純な負荷処理を維持するのに役立ちます。
- 最適なパフォーマンスへの調整:アプリケーションコンテキスト、ワーカーカウント、システム制限、および予想される接続ボリュームを考慮することが重要です。 「Multi_Accept On」を組み合わせて、ワーカープロセスと接続処理用の最適化された構成と、スループットの改善につながります。
- ハイブリッドアプローチ:一部の管理者は、「Multi_accept」と「Accept_mutex」のさまざまな組み合わせを実験して、CPU効率と接続処理速度の間の望ましいバランスを達成する場合があります。

### まとめ
要約すると、「multi_accept」を「」に設定することで、労働者はすべての保留中の接続を一度に受け入れることができ、高負荷シナリオのスループットを改善しますが、労働者の過負荷とCPUスパイクを危険にさらすことができます。 「オフ」を残すことで、労働者は一度に1つの接続を受け入れることを制限し、より安定したリソースの使用と、重い接続負荷の下で潜在的に高いレイテンシーにつながります。選択は、サーバーの効率と応答性を最大化するために、トラフィックパターン、ワークロード特性、およびシステムチューニングに依存します。

この説明は、「Multi_Accept」の技術的な動作、そのパフォーマンスへの影響、他のNginxワーカー設定との相互作用、および実用的な使用シナリオをカバーしています。この指令は、さまざまな環境と交通条件の微調整nginxサーバーのパフォーマンスの重要な部分です。