適用対象: .NET Core 2.1、.NET Core 3.1、.NET 5
この記事は、トラブルシューティング プロセス全体を検討するのに役立ちます。
前提条件
前の部分と同様にこの部分は、トラブルシューティングを開始するときに従う理論とプリンシパルに重点を置くように構成されています。 前提条件はありません。 ただし、これまでにこのトレーニングのすべての手順に従った場合は、次の項目が既に設定されている必要があります。
- Nginx には、次の 2 つの Web サイトがあります。
- 最初の Web サイトは、 myfirstwebsite ホスト ヘッダー (
http://myfirstwebsite) を使用して要求をリッスンし、ポート 5000 でリッスンしているデモ ASP.NET Core アプリケーションに要求をルーティングします。 - 2 番目の Web サイトは、 buggyamb (
http://buggyamb) ホスト ヘッダーを使用して要求をリッスンし、ポート 5001 でリッスンしている 2 番目の ASP.NET Core サンプル バグのあるアプリケーションに要求をルーティングします。
- 最初の Web サイトは、 myfirstwebsite ホスト ヘッダー (
- ASP.NET コア アプリケーションはどちらも、サーバーの再起動時に自動的に再起動するサービスとして実行されているか、アプリケーションが応答を停止するか失敗します。
- Linux ローカル ファイアウォールが有効になっており、SSH トラフィックと HTTP トラフィックを許可するように構成されています。
このパートの目標
前に説明した構成がある場合に発生する可能性のある問題のトラブルシューティングを準備する際に、このパートでは Linux でのプロセスの実行に関する情報を取得するためのガイダンスを提供します。
Linux のすべてがファイルですか?
"Linux のすべてはファイルです" という語句が聞こえるかもしれませんが、このフレーズは本当に当てはまるのですか? この記事シリーズでは Linux の専門知識に焦点を当てませんが、Linux オペレーティング システムは、ファイル システムを介してすべてを公開することを重視しています。 このパートでは、これがなぜなのかを深く掘り下げようとします。
Wikipediaによると、Linuxはprocfsという名前の特別なファイルシステムに基づいています。
proc ファイルシステム (procfs) は、processes およびその他のシステム情報に関する情報を階層ファイルのような構造で提示する、Unix に似たオペレーティング システムの特殊なファイルシステムです。 これにより、カーネルに保持されているプロセス データに動的にアクセスするために、従来の tracing メソッドや kernel メモリへの直接アクセスよりも便利で標準化されたメソッドが提供されます。 通常、データは起動時に /proc という名前のマウント ポイントにマップされます。 proc ファイル システムは、カーネル内の内部データ構造へのインターフェイスとして機能します。 このファイルを使用すると、システムに関する情報を取得し、実行時に特定のカーネル パラメーターを変更できます (sysctl)。
したがって、Linux ベースのコンピューターのスーパーユーザーの場合は、ファイル システム ファイルを使用して、実行中の各プロセスに関する情報にアクセスできます。 Linux ファイルである場合はプロセスも同じになります。
このシリーズの前の部分で簡単に説明したことを思い出してください。プロセスは、 /proc/ ディレクトリの下のファイルと見なされます。 このディレクトリは、次の特殊なディレクトリとして定義:
"この特殊なディレクトリには、カーネル、プロセス、構成パラメーターなど、Linux システムに関するすべての詳細が保持されます。"
ll /proc/ コマンドを使用してこのディレクトリを調べると、いくつかの "ファイル" と "フォルダー" が表示されます。たとえば、/proc/meminfoという名前の "ファイル" が表示されます。 cat /proc/meminfo コマンドを実行すると、サーバーのメモリ使用量の統計情報に関する次の詳細情報が生成されます。
同様に、 cat /proc/cpuinfo コマンドを実行すると、次のサーバー プロセッサ情報が表示されます。
Linux OS のバージョン情報を取得する場合は、 cat /proc/version コマンドを使用できます。
同様に続きます。
プロセスは本当にファイルですか?
プロセスに関しては、Linux システム上で実行中の各プロセスは、 /proc/ フォルダーの下にサブディレクトリとして表示され、各フォルダーにはプロセス ID として名前が付けられます。
いずれかのプロセス ID ディレクトリを調べると、他のいくつかのファイルとフォルダーが表示されます。 次の情報の一部を取得するには、"sudo" を使用してコマンドのプレフィックスを付ける必要があります。
プロセスの 1 つについて cmdline を調べます。 sudo cat /proc/19933/cmdline コマンドを実行します。 (選択するプロセスの PID は異なります)。 出力は次のようになります。 (これは、パート 2 でインストールおよび構成された、BuggyAmb アプリケーションです)。
最後に、 sudo cat /proc/19933/environ コマンドを実行して、BuggyAmb プロセスの環境変数を見てみましょう。 前のパートでは、 ASPNETCORE_URLS 環境変数を使用するように指示されました。 これは、ポート 5001 でリッスンするように Web アプリケーションに指示するために作成されました。
このファイル システム手法を使用すると、プロセスに関する多くの情報を取得できます。
ps コマンド
この記事では、このコマンドの詳細については説明しません。 ただし、このコマンドは、現在のプロセスのスナップショットを生成する最も簡単な方法の 1 つであるため、プロセスについて説明する際にここで説明する必要があります。 man ps コマンドを使用して "man" ページを開き、自分で試してみることをお勧めします。
次のステップ
パート 3.2 - Linux タスク マネージャー、トップおよび htop
次のパートでは、問題のトラブルシューティングに使用できる重要なツールとコマンドをいくつか確認します。