Nginx プロセス スケジューリングの問題の詳細な説明

Nginx プロセス スケジューリングの問題の詳細な説明

Nginx は、マスター プロセス (MasterProcess) と、同じ数のホスト CPU コアを持つワーカー プロセスが連携してさまざまなイベントを処理する、固定数のマルチプロセス モデルを使用します。

Nginx は、マスター プロセス (MasterProcess) と、同じ数のホスト CPU コアを持つワーカー プロセスが連携してさまざまなイベントを処理する、固定数のマルチプロセス モデルを使用します。

メイン管理プロセスは、構成の読み込み、作業プロセスの開始と停止を担当し、作業プロセスは特定の要求の処理を担当します。プロセス間のリソースは独立しています。各ワーカー プロセスは複数の接続を処理します。各接続はワーカー プロセスによって完全に処理されます。プロセスを切り替える必要がなく、プロセス切り替えによるリソース消費の問題も発生しません。デフォルト構成では、ワーカー プロセスの数はホスト上の CPU コアの数と同じです。CPU とプロセス間のアフィニティを最大限に活用してワーカー プロセスを CPU にバインドすることで、マルチコア CPU の処理能力が最大限に引き出されます。

Nginx のメイン プロセスは、外部制御信号を監視し、チャネル メカニズムを通じて関連する信号操作をワーカー プロセスに渡す役割を担います。複数のワーカー プロセスは、共有メモリを通じてデータと情報を共有します。

ヒント: プロセス アフィニティにより、プロセスまたはスレッドを指定された CPU (コア) 上で実行できるようになります。

Nginx の作業プロセスには、次のスケジューリング方法があります。

  • スケジュールなしモード: 接続イベントがトリガーされると、すべてのワーカー プロセスがクライアントとの接続を確立するために競合し、接続が正常に確立されるとクライアント要求の処理を開始します。非スケジュールモードでは、すべてのプロセスがリソースを競い合いますが、最終的にクライアントとの接続を確立できるのは 1 つのプロセスだけです。これにより、システムのリソースが瞬時に大量に消費され、いわゆる「群れ現象」が発生します。
  • ミューテックス ロック モード: 各ワーカー プロセスは、定期的にミューテックス ロックを競います。ワーカー プロセスがミューテックス ロックを取得すると、HTTP 接続確立イベントを受信する権限が与えられ、現在のプロセスのソケット監視がイベント エンジン (epoll など) に挿入され、外部接続イベントを受信します。他のワーカー プロセスは、確立された接続の読み取りおよび書き込みイベントの処理を継続し、定期的にポーリングしてミューテックスの状態を確認することしかできません。ミューテックスが解放された後にのみ、ワーカー プロセスはミューテックスを捕捉し、HTTP 接続確立イベントを処理する権限を取得できます。作業プロセスの最大接続数の 1/8 とプロセスの利用可能な接続数 (free_connection) の差が 1 以上の場合、このラウンドでミューテックス ロックを競う機会は放棄され、新しい接続要求は受け入れられません。確立された接続の読み取りおよび書き込みイベントのみが処理されます。相互排他ロック モードは、集団スラッシング現象を効果的に回避します。多数の短い HTTP 接続の場合、このメカニズムにより、イベント処理権限をめぐって競合するワーカー プロセスによって発生するリソース消費を効果的に回避できます。ただし、長時間接続が有効になっている HTTP 接続が多数ある場合、ミューテックス モードにより少数のワーカー プロセスに負荷が集中し、ワーカー プロセスにかかる負荷が不均一になるため QPS が低下します。
  • ソケット シャーディング: ソケット シャーディングはカーネルによって提供される割り当てメカニズムであり、各ワーカー プロセスが同一のリスニング ソケット セットを持つことができるようになります。外部からの接続要求がある場合、カーネルはどのワーカー プロセスのソケット リスナーが接続を受信できるかを決定します。これにより、群集現象が効果的に回避され、ミューテックス ロック メカニズムと比較してマルチコア システムのパフォーマンスが向上します。この機能を使用するには、listen ディレクティブを構成するときに、reuseport パラメータを有効にする必要があります。

ヒント: Nginx バージョン 1.11.3 以降では、ミューテックス モードはデフォルトで無効になっています。 Linux カーネルがプロセス スケジューリング メカニズムを提供するため、ソケット シャーディング モードは最高のパフォーマンスを発揮します。

Nginx プロセス スケジューリングに関するこの記事はこれで終わりです。Nginx プロセス スケジューリングの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Nginx プロセス管理とリロードの原則の詳細な説明
  • Pythonはnginxのポートとプロセスの状態を監視します
  • Nginx で使われる 2 つのプロセス管理方法と php-fpm の最適化
  • Nginx サーバーのプロセス数を設定し、マルチコア CPU を使用する方法
  • Nginx プロセスを再起動または終了した後に nginx.pid が失われる問題の解決方法
  • nginxプロセスを監視するPythonスクリプトを書いた

<<:  SQL IDENTITY_INSERT ケーススタディ

>>:  Iframe の使用を減らすべきいくつかの理由の分析

推薦する

Dockerはrabbitmqのサンプルコードをインストールして実行します

イメージをプルします: [mall@VM_0_7_centos ~]$ sudo docker pu...

タブ切り替え機能を実装するJavaScriptカスタムプラグイン

この記事では、タブ切り替え機能を実装するためのJavaScriptの具体的なコードを参考までに共有し...

Web Storage APIの使用に関する簡単な説明

目次1. ブラウザのローカルストレージ技術1.1、セッションストレージ1.2、ローカルストレージ2....

レスポンシブ Web デザインが価値のない 5 つの理由

この記事は Tom Ewer の Managewp ブログからのもので、現在人気のレスポンシブ デザ...

docker を使用して minio と java sdk を構築するプロセスの詳細な説明

目次1minioはシンプル2 Dockerビルド minio 2.1 単一ノード2.2 マルチノード...

Linuxでファイルを削除してもスペースが解放されない問題の対処方法

問題の背景業務システムのサーバ監視システムからディスク使用率が90%に達したという早期警告通知が来た...

DockerにNginxをインストールする方法

DockerにNginxをインストールするNginx は、IMAP/POP3/SMTP サービスも提...

Vue での mixin の応用について議論する

Mixin は、再利用可能な機能を Vue コンポーネント間で分散する非常に柔軟な方法を提供します。...

分散監視システムZabbixはSNMPとJMXチャネルを使用してデータを収集します

前回の記事では、Zabbix のパッシブ、アクティブ、Web 監視に関するトピックについて学習しまし...

Vueは動的コンポーネントを使用してTAB切り替え効果を実現します

目次問題の説明Vueの動的コンポーネントとはアプリケーションシナリオの説明実装手順ステップ 1 (新...

Innodb システムテーブルスペースのメンテナンス方法

環境説明:実行中の MySQL 環境があります。以前の構成ファイルの設定が単純すぎたため (inno...

Vueナンバープレート入力コンポーネントの使い方の詳しい説明

参考までに、シンプルなナンバープレート入力コンポーネント(vue)です。具体的な内容は次のとおりです...

基本的なウェブページパフォーマンス最適化ルールの簡単な概要

ブラウザのウェブページを最適化するためのいくつかのルールページの最適化静的リソース圧縮ビルド ツール...

psdカット画像をdiv+css形式に変換する

PSD から div css へのウェブページ切り取り例ステップ 1: まず、すべてのタグの内側と外...

CSS3 rgb と rgba (透明色) の使い方の詳しい説明

誰もが色にとても敏感だと思います。私たちの目が見るところにはどこにでも色があります。では、CSS で...