パート 3.2 - Linux タスク マネージャー、トップ、htop

適用対象: .NET Core 2.1、.NET Core 3.1、.NET 5

この記事では、コマンド ライン ツールをhtop使用topしてプロセスを監視する方法について説明します。

前提条件

前のパートと同様に、この部分は、トラブルシューティングを開始するときに従う理論とプリンシパルに重点を置くように構成されています。 前提条件はありません。 ただし、このトレーニングのすべての手順に従った場合は、次の項目が既に設定されている必要があります。

  • Nginx には、次の 2 つの Web サイトがあります。
    • 最初の Web サイトでは、myfirstwebsite ホスト ヘッダー (http://myfirstwebsite) を使用して要求をリッスンし、ポート 5000 でリッスンしているデモ ASP.NET Core アプリケーションに要求をルーティングします。
    • 2 番目の Web サイトは、バグのある (http://buggyamb) ホスト ヘッダーを使用して要求をリッスンし、ポート 5001 でリッスンしている 2 番目の ASP.NET Coreサンプル バグのあるアプリケーションに要求をルーティングします。
  • どちらの ASP.NET Coreアプリケーションも、サーバーの再起動時に自動的に再起動するサービスとして実行されているか、アプリケーションが応答を停止するか、失敗します。
  • Linux ローカル ファイアウォールが有効になっており、SSH および HTTP トラフィックを許可するように構成されています。

このパートの目標

パフォーマンスの問題のトラブルシューティングを行うときは、プロセスの CPU とメモリの使用状況を監視して、時間の経過に伴うリソース使用量の変化を把握する必要がある場合があります。 Windows では、タスク マネージャーを使用してこれを行うことができます。 Linux には、同じことを達成することを目的とした複数のツールがあります。

このパートでは、 および htop コマンド ライン ツールをtop調べてプロセスを監視します。

top

Linux で同等のタスク マネージャーを開くには、 コマンドを top 実行します。

top コマンドのスクリーンショット。

この例では、PID 19933 の最初の一覧のプロセスで、プロセスの CPU 使用率が高く、メモリ使用量も高いことが確認できます。

列の選択と選択解除

ツールが提供するビューの列を追加または削除するには、ツールの top 実行中に F キーを押します。 アスタリスク (*) でマークされた列は、表示用に選択された列です。 矢印キーを使用して使用可能な列を移動し、Space キーを使用して列を選択または選択解除します。 次に、 Esc キーを押して終了します。

列情報のスクリーンショット。

変更はユーザー アカウントに対して保存されます。 次に を実行 topすると、選択した列が表示されます。

ユーザーによる出力のフィルター処理

問題のあるリソース消費シナリオをターゲットにするには、出力をフィルター処理する方法を top 知ることが重要です。 これを行う最も一般的な方法の 1 つは、ユーザー名でプロセスをフィルター処理することです。 U キーを押し、ユーザー名を入力できます。 次のスクリーンショットは、 top www-data ユーザーの使用可能なプロセス スナップショットをフィルター処理するツールを示しています。

ユーザー情報のスクリーンショット。

Enter キーを押すと、特定のユーザー (この例では www-data ユーザー) によって実行されるプロセスが表示されます。

ユーザー情報のスクリーンショット。

フィルター処理された top ビューの出力を調べると、2 つのプロセスが .NET プロセスであることがわかります。 これらは、2 つの ASP.NET Core アプリケーションを実行するプロセスであり、他の 2 つのプロセスは Nginx に属しています。

コマンドを直接実行 top するときにフィルターを使用できます。 たとえば、コマンドを実行すると、ツールを top -u www-datatop いて U キーを押してユーザーによってフィルター処理する場合と同じ出力が生成されます。

アイドル プロセスを削除する

I キーを押すか、コマンドを top -i 実行して出力を top フィルター処理し、CPU を使用しているプロセスのみを表示します。 次のスクリーンショットは、コマンドの top -i -u www-data 出力を示しています。 www-data ユーザー アカウントを top 使用して開始された 4 つのプロセスがある場合でも、出力によってアイドル プロセスが非表示になります。 PID=19933 を持つプロセスのみが CPU を消費します。

情報の削除のスクリーンショット。

もう一度 I キーを押してスイッチを切り替え、アイドル プロセスも表示します。

プロセスを強制終了する

プロセスを強制終了または終了するには、プロセスに強制終了シグナルを送信する必要があります。 以前にコマンドを使用してプロセスを sudo kill -9 <PID> 強制終了したことを思い出すかもしれません。 を使用 topしてプロセスを強制終了することもできます。 K キーを押して実行中にプロセス top を強制終了し、強制終了するプロセスの PID を入力します。

kill コマンドのスクリーンショット。

Enter キーを押すと、top信号の種類を確認します。 Enter キーをもう 1 回押すと、終了シグナル (15/sigterm) が送信されます。

kill top コマンドのスクリーンショット。

数秒後、PID 122632のプロセスが一覧に表示されません。 一覧では、"122632" プロセスは、BuggyAmb ASP.NET Core アプリケーションに対応します。 自動的に開始するように構成されているため、シャットダウン後に新しい PID を持つ新しい .NET プロセスが開始されることがわかります。

Htop

Htop は、 と同様 topに、リアルタイムでシステムを監視するためのプロセス ビューアーとテキスト モード アプリケーションです。 使いやすく、実行中のプロセスの完全な一覧が表示されます。

このツールは htop 、このコースの仮想サーバーをインストールするために使用される Ubuntu Linux のディストリビューションに事前インストールされています。 Linux ディストリビューションにインストールされていない場合 htop は、Linux のパッケージ マネージャーを使用してインストールできます。 (詳細については、「 パート 1.3 - Linux に .NET Core をインストール する」を参照してください)。

ツールを起動するには、 コマンドを htop 実行します。 次のようなカラフルな出力が表示されます。

kill htop コマンドのスクリーンショット。

注:

一番下の行は、使用できるファンクション キーを示します。 F6 キーを押してさまざまなオプションで並べ替え、方向キーを使用して列をPERCENT_MEM選択し、Enter キーを押します。 これにより、プロセスがメモリ使用量で並べ替えられます。

メモリ使用量のスクリーンショット。

コマンドと同様に top 、いくつかの関数にキーボード ショートカットを使用できます。 たとえば、 U キーを押してリストからユーザー名を選択します。

ユーザー名情報のスクリーンショット。

ただし、出力には混乱が生 htop じます。 最後の例の出力に基づいて、www-data ユーザーには 4 つのプロセスが表示されます。 ただし、さらに多くのエントリがあることがわかります。 何が原因で発生する可能性がありますか?

出力の違いは、プロセスとそのスレッドの両方が既定で表示されるため htop です。 スレッドを表示しない限り、常にスレッド ビューを無効にして出力を明確にすることをお勧めします。 スレッド ビューを無効にし、プロセスのみを表示するには、 Shift キーを押しながら H キーを押します。 次のスクリーンショットは、スレッドのないプロセスを示しています。

プロセス情報のスクリーンショット。

プロセスを強制終了する必要がある場合は、方向キーを使用してプロセスを選択し、 F9 キーを押し、 Enter キーを押して "終了" シグナルを送信します。

終了情報のスクリーンショット。

この簡潔な概要を使用すると、システム上で実行され、リソースを消費しているプロセスを理解できます。 を終了 htopするには、 F10 キーまたは Ctrl キーを押しながら C キーを押します。

次の手順

パート 3.3 - デバッガー、コア ダンプ、コア ダンプの収集

このシリーズの次の部分 (「トラブルシューティングの準備」) では、デバッガーとダンプ ファイルについて説明します。