プロセス構造図Nginx はマルチプロセス構造です。マルチプロセス構造は、次のような Nginx の高可用性と信頼性を確保するように設計されています。
注: マルチプロセスがマルチスレッドに比べて高可用性と高信頼性を保証できる理由は、プロセス間のアドレス空間が独立しており、プロセス間のタスクが互いに影響を及ぼさないためです。マルチスレッドと比較すると、CPU リソースをより多く消費します。複数のスレッドがプロセスのアドレス空間を共有するため、1 つのスレッド タスクの失敗は他のスレッドのタスクに影響します。 Nginx サービスのユーザーが nginx であると仮定すると、次のコマンドを使用して、現在実行中の Nginx サービスのマスター プロセスとワーカー プロセスを表示できます。また、4 つのワーカー プロセスの親プロセス ID がマスターのプロセス ID (1325) であることがわかります。 [root@master ~]# ps -ef | grep nginx | grep -v grep | grep -v php-fpm root 1325 1 0 11:28 ? 00:00:00 nginx: マスタープロセス /usr/local/nginx/sbin/nginx nginx 1332 1325 0 11:28 ? 00:00:00 nginx: ワーカープロセス nginx 1334 1325 0 11:28 ? 00:00:00 nginx: ワーカープロセス nginx 1335 1325 0 11:28 ? 00:00:00 nginx: ワーカープロセス nginx 1336 1325 0 11:28 ? 00:00:00 nginx: ワーカープロセス
[ルート@マスター ~]# lsof -i:80 コマンド PID ユーザー FD タイプ デバイス サイズ/オフ ノード名 nginx 1325 ルート 6u IPv4 22282 0t0 TCP *:http (LISTEN) nginx 1332 nginx 6u IPv4 22282 0t0 TCP *:http (LISTEN) nginx 1334 nginx 6u IPv4 22282 0t0 TCP *:http (LISTEN) nginx 1335 nginx 6u IPv4 22282 0t0 TCP *:http (LISTEN) nginx 1336 nginx 6u IPv4 22282 0t0 TCP *:http (LISTEN) セマフォ管理Linux セマフォ管理メカニズム シグナルは、プロセス間の通信方法の 1 つです。一般的な使用法としては、ターミナル ユーザーがシグナル メカニズムを介して割り込みコマンドを入力し、プログラムの実行を停止します。 プロセスにシグナルを送信することで、プロセスを管理できます。kill 合計で 64 個のセマフォがあり、次のセマフォを明確にする必要があります。 kill -1 $PID: (SIGHUP) はプロセスを再ロードします。ターミナルから切断されたデーモン プロセスの場合、このシグナルは設定ファイルを再読み込みするように通知するために使用されます。 kill -2 $PID: (SIGINT) 割り込み (Ctrl+C 経由); kill -3 $PID: (SIGQUIT) キーボード入力 (ctrl-\) を終了します。 kill -9 $PID: (SIGKILL) は、プログラムの現在の状態に関係なく、プロセスを直ちに終了します。 kill -10 $PID: (SIGUSR1) $USR1 と $USR2 はどちらもユーザー定義用に予約されたセマフォです。 -12 $PID:($IGUSR2) を強制終了します kill -15 $PID: (SIGTERM) は通常プロセスを停止します。 kill -17 $PID: (SIGCHLD) 親プロセスと子プロセス間の通信のためのシグナル。親プロセスは、多くの子プロセスを fork() できます。子プロセスがハングアップすると、シグナルが親プロセスに送信されます。 kill は指定された情報をプログラムに送信できます。デフォルトのメッセージはSIGTERM(15)で、指定されたプログラムを終了します。それでも問題が解決しない場合は、SIGKILL(9) メッセージを使用してプログラムを強制的に削除してみてください。プログラムまたはジョブ番号は、ps コマンドまたは jobs コマンドを使用して表示できます。 kill -l # サポートされているすべての kill PID シグナルを表示します # プロセスを強制終了する kill 1024 # 複数のプロセスを強制終了し、プロセス番号をスペースで区切ります kill 1024 2048 # kill -9 はプロセスを強制的に即時終了することを意味します kill -9 1024
セマフォを使用してNginxプロセスを管理する Nginxプロセスは、 セマフォを使用してマスター プロセスとワーカー プロセスを管理します (ワーカー プロセスを管理するためにセマフォを使用することは推奨されません。ワーカー プロセスはマスター プロセスによって管理および保守される必要があります)。 マスタープロセス ワーカープロセスの監視
ワーカープロセスの管理 信号の受信
例: killコマンドを使用してマスタープロセスを強制終了します。 キル -s SIGTERM 1325 kill コマンドを使用して Nginx にファイルを再読み込みさせ、ワーカー プロセスを閉じて新しいワーカー プロセスを生成します。マスター プロセス (ID) は変更されません。 キル -s SIGHUP 1325 ワーカープロセス 信号の受信
セマフォを使用してワーカー プロセスを直接管理することは可能ですが、推奨されません。ワーカー プロセスは、マスター プロセスによって管理および保守される必要があります。 例: ワーカー プロセスを強制終了するには、kill コマンドを使用します。これにより、ワーカー プロセスが強制終了されます。Linux は、強制終了されたワーカー プロセスの親プロセス (マスター プロセス) に SIGCHLD シグナルを送信します。そのため、マスター プロセスは、子プロセスの 1 つに問題がある可能性があることを検出し、ワーカー プロセスの数を維持するために新しいワーカー プロセスを開始します。 キル -s SIGTERM 1332 コマンドライン
ヘルプコマンドを表示するには [itbsl@master ~]$ nginx -h nginx バージョン: nginx/1.18.0 使用方法: nginx [-?hvVtTq] [-s シグナル] [-c ファイル名] [-p プレフィックス] [-g ディレクティブ] オプション: -?,-h : このヘルプ -v : バージョンを表示して終了 -V : バージョンと設定オプションを表示して終了する -t : 設定をテストして終了 -T : 設定をテストし、ダンプして終了する -q : 構成テスト中にエラー以外のメッセージを抑制します -s シグナル: マスタープロセスにシグナルを送信: 停止、終了、再開、再ロード -p prefix : プレフィックスパスを設定します (デフォルト: /usr/local/nginx-1.18.0/) -c ファイル名: 設定ファイルを設定します (デフォルト: conf/nginx.conf) -g ディレクティブ: 設定ファイルからグローバルディレクティブを設定する パラメータの説明:
設定ファイルの再読み込みの原則nginx マスター プロセスに SIGHUP シグナルを送信するか、 設定ファイルのプロセスをリロードする
図を使って説明すると次のようになります。 グラフィック分析: 1. 左側の緑色のステータスは 2. <?php 睡眠(15); echo json_encode(['msg' => 'hello world']);die(); 3. マスター プロセスがタスクをワーカー サブプロセスに渡して処理することは既にわかっています。現在タスクは 1 つしかないため、タスクを処理するワーカー プロセスは 1 つだけです。 4. reload コマンドを実行すると、マスター プロセスは 4 つの新しいワーカー プロセス (上の図の黄色のワーカー プロセス) を作成し (構成によって異なります)、古いアイドル ワーカー プロセス (緑のワーカー プロセス) をシャットダウンします。リクエストを処理している古いワーカー プロセスはすぐにはシャットダウンされませんが、リクエストが処理された後にシャットダウンされます。 5. 最後に残った古いワーカー プロセスは、タスクを完了した後にシャットダウンされます。残っているものはすべて、新しい nginx.conf 構成によって生成された新しいワーカー プロセスです。以下の図を参照してください。シャットダウン中の古いワーカー プロセスは、上記で 15 秒間スリープするタスク インターフェイスの処理を完了していないため、まだ表示されています。 要約するNginx プロセス管理とオーバーロードの原則に関するこの記事はこれで終わりです。Nginx プロセス管理とオーバーロードの原則の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: CSS で写真のスタッキング効果を実装するサンプルコード
>>: JavaScript でフォロー広告を実装するためのサンプルコード
初めてwampをインストールした後、すべてのサービスが正常に使用できますが、再起動するとwampのア...
ソース ファイルを右クリックすると、次のコードが見つかります。 1. CSSを使用してFirefox...
1. まずテーブル作成ステートメントを見てみましょう テーブル学生を作成( sid int 主キー ...
目次配列をフラット化する方法1.flat() の使用2. 正規表現を使用する3.reduce()+c...
この記事の例では、JavaScriptで等速アニメーションを実装するための具体的なコードを参考までに...
<base> タグは、ページ上のすべてのリンクのデフォルトのアドレスまたはデフォルトのタ...
MySQL 5.7.9 のインストールチュートリアルを録画してみんなと共有しましょう環境の紹介:オペ...
この記事では、例を使用して、MySQL ステートメントを使用して、単純な追加、削除、変更、およびクエ...
データベースのバックアップ #文法: # mysqldump -h server-u usernam...
Cocos Creator バージョン: 2.3.4デモのダウンロード: https://files...
Win10 で csv をエクスポートする方法は 2 つあります。1 つ目はツールを使用することです...
共通点: DIV タグと SPAN タグは、コンテンツ全体を非表示にしたり、コンテンツ全体を移動した...
現在、OK ボタンをクリックしたときやキーボードの Enter キーを押したときに操作を実行するとい...
1.コアファイルプログラム実行中にセグメンテーション エラー (コア ダンプ) が発生すると、プログ...
<本文> <div id="ルート"> <h2&...