プロセス情報の分析
カーネルには、プロセスおよび環境に関する有益な情報が含まれています。 以下のコマンドを使用して、この情報を表示することができます。
ps コマンド
Linux®では、Java™ スレッドはシステム・スレッドとして実装され、 Linux ディストリビューションによってはプロセス・テーブルに表示される場合があります。
ps コマンドを実行すると、現在のプロセスのスナップショットが得られます。 ps コマンドは、その情報を /proc ファイル・システムから取得します。 ps の使用例を以下に示します。
ps -efwH
UID PID PPID C STIME TTY TIME CMD
cass 1234 1231 0 Aug07 ? 00:00:00 /bin/bash
cass 1555 1234 0 Aug07 ? 00:00:02 java app
cass 1556 1555 0 Aug07 ? 00:00:00 java app
cass 1557 1556 0 Aug07 ? 00:00:00 java app
cass 1558 1556 0 Aug07 ? 00:00:00 java app
cass 1559 1556 0 Aug07 ? 00:00:00 java app
cass 1560 1556 0 Aug07 ? 00:00:00 java app - e
- すべてのプロセスを選択する場合に指定します。
- f
- 完全なリストが表示されます。
- l
- 長形式で表示します。
- m
- デフォルトで表示されない場合にスレッドを表示します。
- w
- ワイド出力を指定する出力修飾子。
- H
- 階層リストを表示するため、Java スレッドに関心がある場合に役立ちます。 階層表示では、それぞれのプロセスが、原始スレッド、スレッド・マネージャー、および子スレッドのどれであるのかを判別できます。 上記の例では、プロセス 1555 が原始スレッドで、プロセス 1556 がスレッド・マネージャーです。 すべての子プロセスに、スレッド・マネージャーを指す親プロセス ID があります。
top コマンド
top コマンドは、最も CPU 集中型のプロセスまたは最もメモリー集中型のプロセスをリアルタイムで表示します。 これにはプロセスを操作するための対話式インターフェースが用意されており、CPU 使用量やメモリー使用量など、さまざまな基準でソートできます。 top の実行中に h を押すと、使用可能な対話式コマンドがすべて表示されます。
top コマンドでは、プロセスごとにいくつかの情報フィールドが表示されます。 process フィールドには実行中のプロセスの総数が表示されますが、この情報は、実行中、スリープ中、停止済み、またはゾンビの各タスクに分類されます。 PID、PPID、および UID の表示のほかに、top コマンドでは、メモリー使用量およびスワップ・スペースに関する情報が表示されます。 このmemフィールドには、使用可能メモリー、空きメモリー、使用済みメモリー、共有メモリー、およびバッファーに使用されたメモリーを含む、メモリー使用量に関する統計が表示されます。 swap フィールドには、合計スワップ・スペース、使用可能スワップ・スペース、および使用済みスワップ・スペースが表示されます。
vmstat コマンド
vmstat コマンドは、仮想ストレージに関する統計を報告します。 システム全体に関する報告が行われるため、システム全体のヘルス・チェックを行う場合に便利です。 top などのコマンドを使用することで、プロセスのオペレーションに関するより具体的な情報を取得できます。
セッション中に初めてこのコマンドを使用した場合、情報は前回のリブート以降の平均として報告されます。 その次の使用からは、オプションとして指定可能なサンプリング期間に基づいてレポートが生成されます。 vmstat 3 4は、3 秒ごとに4 回のカウント値を表示します。 アプリケーションの前に vmstat を開始して、その出力をファイルに書き出し、アプリケーションを開始および実行した際に後からその統計を調べると、役に立つことがあります。
このコマンドの基本的な出力は、以下のセクションに分かれて表示されます。
- プロセス
- 実行時待ち状態、ブロック状態、またはスワップアウト状態のプロセスの数が表示されます。
- メモリー
- スワップ済みメモリー、空きメモリー、バッファーに入れられたメモリー、およびキャッシュに入れられたメモリーの量が表示されます (キロバイト)。 アプリケーション実行のある段階において空きメモリーが少なくなっていく場合、メモリー・リークが発生している可能性があります。
- スワップ
- ディスクとの間でスワップインおよびスワップアウトしているメモリーの量が表示されます (キロバイト/秒)。 すべてのメモリーを格納できるだけの RAM がない場合、格納しきれない分がディスクにスワップアウトされます。 この値が大きい場合は、十分な RAM がないことを意味している可能性があります (ただし、最初にアプリケーションを開始した際にスワッピングが発生するのは普通のことです)。
- io
- ブロック・デバイスとの間で送信または受信されたメモリーのブロック数が表示されます (ブロック数/秒)。
- システム
- 割り込みおよびコンテキスト・スイッチの回数が表示されます (回数/秒)。 コンテキスト・スイッチが行われるたびにパフォーマンス上のペナルティーが発生するため、このセクションの値が高いということは、プログラムが適切なスケールになっていないことを意味している可能性があります。
- cpu
- ユーザー時間、システム時間、およびアイドル時間の間でプロセッサー時間の分類明細が表示されます。 アイドル時間の数字はプロセッサーがどれだけビジーであるかを示しており、低い値ほどプロセッサーがビジーであることになります。 このことを知っておくと、プログラムのどの領域が最も多く CPU を使用しているのかを理解するために役立ちます。