適用対象:Linux .NET
この記事では、 top
および htop
コマンド ライン ツールを使用してプロセスを監視する方法について説明します。
前提条件
前の部分と同様にこの部分は、トラブルシューティングを開始するときに従う理論とプリンシパルに重点を置くように構成されています。 前提条件はありません。 ただし、これまでにこのトレーニングのすべての手順に従った場合は、次の項目が既に設定されている必要があります。
- 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 トラフィックを許可するように構成されています。
このパートの目標
パフォーマンスの問題のトラブルシューティングを行うときは、プロセスの CPU とメモリの使用量を監視して、時間の経過に伴うリソース使用量の変化を把握することが必要になる場合があります。 Windows では、タスク マネージャーを使用して実行できます。 Linux には、同じことを実現することを目的とした複数のツールがあります。
このパートでは、 top
と htop
コマンド ライン ツールを調べてプロセスを監視します。
上位
Linux で同等のタスク マネージャーを開くには、 top
コマンドを実行します。
この例では、PID 19933 の最初の一覧のプロセスで、プロセスの CPU 使用率が高く、メモリ使用量も高くなっていることを確認できます。
列の選択と選択解除
top
ツールが提供するビューの列を追加または削除するには、ツールの実行中に F を選択します。 アスタリスク (*) でマークされている列は、表示用に選択された列です。 矢印キーを使用して使用可能な列間を移動し、Space キーを使用して列を選択または選択解除します。 次に、 Esc を選択して終了します。
変更はユーザー アカウントに保存されます。 次回 top
実行すると、選択した列が表示されます。
ユーザーによる出力のフィルター処理
問題のあるリソース消費シナリオをターゲットにするには、 top
出力をフィルター処理する方法を理解することが重要です。 最も一般的な方法の 1 つは、ユーザー名でプロセスをフィルター処理することです。
Uを選択し、ユーザー名を入力します。 次のスクリーンショットは、www-data ユーザーの使用可能なプロセス スナップショットをフィルター処理する top
ツールを示しています。
Enter を選択すると、特定のユーザー (この例では www-data ユーザー) によって実行されるプロセスが表示されます。
フィルター処理された top
ビューの出力を調べると、2 つのプロセスが .NET プロセスであることがわかります。 これら 2 つのプロセスは、2 つの ASP.NET Core アプリケーションを実行しますが、他の 2 つのプロセスは Nginx に属しています。
top
コマンドを直接実行するときにフィルターを使用できます。 たとえば、 top -u www-data
コマンドを実行すると、 top
ツールを開き、 U を選択してユーザーでフィルター処理した場合と同じ出力が生成されます。
アイドル状態のプロセスを削除する
Iを選択するか、top -i
コマンドを実行してtop
出力をフィルター処理して、CPU を消費しているプロセスのみを表示します。 次のスクリーンショットは、 top -i -u www-data
コマンドの出力を示しています。 www-data ユーザー アカウントを使用して開始された 4 つのプロセスがある場合でも、 top
出力ではアイドル プロセスが非表示になります。 PID=19933 のプロセスのみが CPU を消費します。
もう一度 I を選択してスイッチを切り替え、アイドル状態のプロセスも表示します。
プロセスを強制終了する
プロセスを強制終了または終了するには、プロセスに強制終了シグナルを送信する必要があります。 前に sudo kill -9 <PID>
コマンドを使用してプロセスを強制終了したことを思い出してください。
top
を使用してプロセスを強制終了することもできます。
Kを選択してtop
実行中にプロセスを強制終了し、強制終了するプロセスの PID を入力します。
Enter を選択すると、シグナルの種類top
求められます。
Enterもう 1 回選択して、"terminate" シグナル (15/sigterm
) を送信します。
数秒後、PID 122632のプロセスが一覧に表示されません。 一覧では、"122632" プロセスが、ASP.NET Core アプリケーションに対応していることを忘れないでください。 自動的に開始するように構成されているため、シャットダウン後に新しい PID を持つ新しい .NET プロセスが開始されることがわかります。
htop
Htop は、 top
と同様に、リアルタイムでシステムを監視するためのプロセス ビューアーとテキスト モード アプリケーションです。 使いやすく、実行中のプロセスの完全な一覧が表示されます。
htop
ツールは、このコースの仮想サーバーのインストールに使用される Ubuntu Linux のディストリビューションにプレインストールされています。
htop
が Linux ディストリビューションにインストールされていない場合は、Linux のパッケージ マネージャーを使用してインストールできます。 ( を参照してくださいパート 1.3 - 詳細については .NET を Linux にインストールします。)
ツールを起動するには、 htop
コマンドを実行します。 次のようなカラフルな出力が表示されます。
Note
下の行は、使用できるファンクション キーを示します。
F6を選択してさまざまなオプションで並べ替え、方向キーを使用してPERCENT_MEM
列を選択し、Enter を選択します。 これにより、メモリ使用量によってプロセスが並べ替えられます。
top
コマンドと同様に、複数の関数にキーボード ショートカットを使用できます。 たとえば、 U を選択して、一覧からユーザー名を選択します。
ただし、 htop
出力には混乱が発生します。 最後の例の出力に基づいて、www-data ユーザーの 4 つのプロセスが表示されます。 ただし、さらに多くのエントリがあることがわかります。 この動作の原因は何ですか?
出力の違いは、 htop
が既定でプロセスとそのスレッドの両方を表示するためです。 スレッドを表示する場合を除き、常にスレッド ビューを無効にして出力を明確にすることをお勧めします。 スレッド ビューを無効にしてプロセスのみを表示するには、 Shift+H を選択します。 次のスクリーンショットは、スレッドのないプロセスを示しています。
プロセスを強制終了する必要がある場合は、方向キーを使用してプロセスを選択し、 F9 を選択し、 Enter を選択して "terminate" シグナルを送信します。
この簡潔な概要により、どのプロセスが実行され、システム上のリソースを消費しているかがわかります。
htop
を終了するには、F10 または Ctrl+C を選択します。
次のステップ
このシリーズの次の部分 (Part 3.3 - デバッガー、コア ダンプ、コア ダンプの収集) では、デバッガーとダンプ ファイルについて説明します。