次の方法で共有


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

適用対象: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 サンプル バグのあるアプリケーションに要求をルーティングします。
  • ASP.NET コア アプリケーションはどちらも、サーバーの再起動時に自動的に再起動するサービスとして実行されているか、アプリケーションが応答を停止するか失敗します。
  • Linux ローカル ファイアウォールが有効になっており、SSH トラフィックと HTTP トラフィックを許可するように構成されています。

このパートの目標

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

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

上位

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 を入力します。

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

Enter を選択すると、シグナルの種類top求められます。 Enterもう 1 回選択して、"terminate" シグナル (15/sigterm) を送信します。

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

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

htop

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

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

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

kill 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 - デバッガー、コア ダンプ、コア ダンプの収集) では、デバッガーとダンプ ファイルについて説明します。