3.3. Red Hat Enterprise Linux固有の情報

Red Hat Enterprise Linux作動環境下でハンド幅とCPU使用を監視するということは、 章2章で説明しているツールを使用することになります。 従って、これ以降を読み進める前に章2章を読んでいない方は そちらを先にお読みください。

3.3.1. Red Hat Enterprise Linux上でバンド幅を監視する

項2.4.2で示すように、 バンド幅の使用を直接監視するのは困難です。 ただし、デバイスレベルの統計を調べることにより、 システム上でバンド幅の不足が問題となっているかのおおよその測定をすることができます。

vmstatを使い、biフィールドと boフィールドを調べると 全体的なデバイスのアクティビティが過剰になっていないかを確認できます。 また、siフィールドとsoフィールドを書き留めておくと、 swap関連I/Oに対して行われるべきディスクアクティビティがどのくらいあるか 詳細がわかります。

   procs                      memory    swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
 1  0  0      0 248088 158636 480804   0   0     2     6  120   120  10   3  87
        

この例では、biフィールドは ブロックデバイスに毎秒2ブロックが書き込まれていることを表し(主としてディスクドライブ)、 bo フィールドは ブロックデバイスから毎秒6ブロック読み読み込まれていることを表しています。 siフィールドと soフィールドが毎秒swap関連I/O率ゼロ(0)キロバイトを 表しているので、このアクティビティにスワップすべきものはないことがわかります。

iostatを使うとディスク関連アクティビティの詳細を 表示することができます。

Linux 2.4.21-1.1931.2.349.2.2.entsmp (raptor.example.com)     07/21/2003

avg-cpu:  %user   %nice    %sys   %idle
           5.34    4.60    2.83   87.24

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
dev8-0            1.10         6.21        25.08     961342    3881610
dev8-1            0.00         0.00         0.00         16          0
        

この出力ではメジャー番号が8のデバイス(1番目のSCSIディスクの /dev/sda)が 1 入出力処理より若干多い秒平均値になっていることを示しています(tsp フィールド)。このデバイスの入出力アクティビティのほとんどが書き込みであり (Blk_wrtnフィールド)、毎秒25ブロック余りの書き込みになっています (Blk_wrtn/sフィールド)。

これよりさらに詳しい詳細が必要な場合は、iostat-xオプションを使います。

Linux 2.4.21-1.1931.2.349.2.2.entsmp (raptor.example.com)     07/21/2003

avg-cpu:  %user   %nice    %sys   %idle
           5.37    4.54    2.81   87.27

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz
/dev/sda    13.57   2.86  0.36  0.77   32.20   29.05    16.10    14.53    54.52
/dev/sda1    0.17   0.00  0.00  0.00    0.34    0.00     0.17     0.00   133.40
/dev/sda2    0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00    11.56
/dev/sda3    0.31   2.11  0.29  0.62    4.74   21.80     2.37    10.90    29.42
/dev/sda4    0.09   0.75  0.04  0.15    1.06    7.24     0.53     3.62    43.01
        

フィールドの数が増えて行が長くなっている他にも、 まずこのiostat出力はパーティションごとのレベルで 統計を表示していることに注意してください。 デバイス名をマウントポイントと関連づけるためにdfを使うと、 例えば、/home/を含むパーティションが過剰な負荷になっている場合、 このレポートを使用して確認することができます。

実際、iostat -xからの出力の各行は長くこれよりも多くの情報が 含まれています。各行のリマインダです(読みやすいようデバイスの欄が付け加えられています)。

Device:    avgqu-sz   await  svctm  %util
/dev/sda       0.24   20.86   3.80   0.43
/dev/sda1      0.00  141.18 122.73   0.03
/dev/sda2      0.00    6.00   6.00   0.00
/dev/sda3      0.12   12.84   2.68   0.24
/dev/sda4      0.11   57.47   8.94   0.17
        

この例では、/dev/sda2がシステムのswapパーティションである のがわかります。このパーティションの多くのフィールドが0.00 と表示されていて、このシステムでのswapに問題がないことがわかります。

また、/dev/sda1にも注意してください。 このパーティションの統計は異常です。全体的なアクティビティは低いのに、 平均I/O要求サイズ(avgrq-szフィールド)、 平均待機時間(awaitフィールド)、 平均サービス時間(svctmフィールド)が 他のパーティションに比べてかなり大きくなっているのはなぜでしょうか。 これは、このパーティションが/boot/ディレクトリを含んでおり、 そこにカーネルと初期 ramdiskが保存されているからです。 システムがブートすると、ブートプロセス中に使用される読み込みI/Oはかなりの大きさの ブロックになり、相対的にiostat表示の 待機時間とサービス時間が長くなります (rsec/sフィールドと rkB/sフィールドだけは0ではないことに 注意してください。ここでは定期的な書き込みは行われていません)。

I/O統計の長期的な概要を表示するのにsarを使うことができます。 例えば、sar -bでは全般的なI/Oレポートを表示します。

Linux 2.4.21-1.1931.2.349.2.2.entsmp (raptor.example.com)     07/21/2003

12:00:00 AM       tps      rtps      wtps   bread/s   bwrtn/s
12:10:00 AM      0.51      0.01      0.50      0.25     14.32
12:20:01 AM      0.48      0.00      0.48      0.00     13.32
…
06:00:02 PM      1.24      0.00      1.24      0.01     36.23
Average:         1.11      0.31      0.80     68.14     34.79
        

ここでは、iostatの最初の表示と同様、 統計はすべてのブロックデバイスに対してグループ化されています。

sar -dを使うと別のI/O関連レポートが生成されます。

Linux 2.4.21-1.1931.2.349.2.2.entsmp (raptor.example.com)     07/21/2003

12:00:00 AM       DEV       tps    sect/s
12:10:00 AM    dev8-0      0.51     14.57
12:10:00 AM    dev8-1      0.00      0.00
12:20:01 AM    dev8-0      0.48     13.32
12:20:01 AM    dev8-1      0.00      0.00
…
06:00:02 PM    dev8-0      1.24     36.25
06:00:02 PM    dev8-1      0.00      0.00
Average:       dev8-0      1.11    102.93
Average:       dev8-1      0.00      0.00
        

このレポートではデバイスごとの情報が表示されますが、詳細はほとんどありません。

特定のバスやデータパスのバンド幅使用を表示する明確な統計はありませんが、 少なくとも動作していてアクティビティを使用しているデバイスを確認して、 間接的にバスの負荷を確定することができます。

3.3.2. Red Hat Enterprise Linux上でCPU使用を監視する

バンド幅とは異なり、CPU使用を監視するのはずっと簡単です。 GNOME システムモニタの単純なCPU使用率から sarによる詳細な統計まで、 何によってどのくらいCPU処理能力が消費されているのかを正確に確認することができます。

GNOME System Monitor以外に、 リソース監視ツールとしてtop章2章で解説されており、CPU使用に関する表示について詳しく述べられています。 次はデュアルプロセッサワークステーションからのtopのレポートです。

  9:44pm  up 2 days, 2 min,  1 user,  load average: 0.14, 0.12, 0.09
90 processes: 82 sleeping, 1 running, 7 zombie, 0 stopped
CPU0 states:  0.4% user,  1.1% system,  0.0% nice, 97.4% idle
CPU1 states:  0.5% user,  1.3% system,  0.0% nice, 97.1% idle
Mem:  1288720K av, 1056260K used,  232460K free,       0K shrd,  145644K buff
Swap:  522104K av,       0K used,  522104K free                  469764K cached

  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
30997 ed        16   0  1100 1100   840 R     1.7  0.0   0:00 top
 1120 root       5 -10  249M 174M 71508 S <   0.9 13.8 254:59 X
 1260 ed        15   0 54408  53M  6864 S     0.7  4.2  12:09 gnome-terminal
  888 root      15   0  2428 2428  1796 S     0.1  0.1   0:06 sendmail
 1264 ed        15   0 16336  15M  9480 S     0.1  1.2   1:58 rhn-applet-gui
    1 root      15   0   476  476   424 S     0.0  0.0   0:05 init
    2 root      0K   0     0    0     0 SW    0.0  0.0   0:00 migration_CPU0
    3 root      0K   0     0    0     0 SW    0.0  0.0   0:00 migration_CPU1
    4 root      15   0     0    0     0 SW    0.0  0.0   0:01 keventd
    5 root      34  19     0    0     0 SWN   0.0  0.0   0:00 ksoftirqd_CPU0
    6 root      34  19     0    0     0 SWN   0.0  0.0   0:00 ksoftirqd_CPU1
    7 root      15   0     0    0     0 SW    0.0  0.0   0:05 kswapd
    8 root      15   0     0    0     0 SW    0.0  0.0   0:00 bdflush
    9 root      15   0     0    0     0 SW    0.0  0.0   0:01 kupdated
   10 root      25   0     0    0     0 SW    0.0  0.0   0:00 mdrecoveryd
          

最初の CPU 関連情報が先頭行に記されています、平均負荷です。平均負荷は、システム上の runnable プロセスの平均数に相当します。平均負荷は 3 つの数字の組合わせで表記されることが多く (topで表記)、それぞれ過去 1 分間、5 分間、15 分間の平均負荷を表します。この例ではシステムにそれほど負荷はかかっていなかったことを示しています。

次の行は、CPU使用には厳密には関連しませんが、 間接的に関連しており、runnableプロセスの数を表示します (ここでは、1つのみ -- この例では特殊な意味を持ちますので この数値を覚えておいてください)。 runnableプロセスの数はシステムのCPU拘束度を測定するのに便利です。

次の 2 行はシステムにある 2 つの CPU それぞれの現在の使用状況を表示しています。使用統計は、CPU サイクルがユーザーレベルの処理に使用されたのかシステムレベルの処理なのかを表示しています。また、変更されたスケジュールプライオリティを持つ プロセスによって使用された CPU 時間量を表示する統計も含んでいます。 最後に、アイドル時間の統計があります。

表示されているプロセス関連のセクションに下がっていくと、ほとんどの CPU 処理能力を使っているプロセスは top 自身であることがわかります。つまり、この普段はアイドル状態になっている実行可能なプロセスは topであり、自身の状態を表示していたことになります。

ヒントヒント
 

システムモニターを実行する動作が、 受け取るリソース使用統計に影響することを忘れないようにしてください。 ソフトウェアベースのモニターはすべてある程度こうした影響を受けます。

CPU使用に関するより詳細な情報を得るにはツールを変更しなければなりません。 vmstatからの出力を調べると、 サンプルのシステムに関して幾分異なる方向から理解することができます。

   procs                      memory    swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
 1  0  0      0 233276 146636 469808   0   0     7     7   14    27  10   3  87
 0  0  0      0 233276 146636 469808   0   0     0     0  523   138   3   0  96
 0  0  0      0 233276 146636 469808   0   0     0     0  557   385   2   1  97
 0  0  0      0 233276 146636 469808   0   0     0     0  544   343   2   0  97
 0  0  0      0 233276 146636 469808   0   0     0     0  517    89   2   0  98
 0  0  0      0 233276 146636 469808   0   0     0    32  518   102   2   0  98
 0  0  0      0 233276 146636 469808   0   0     0     0  516    91   2   1  98
 0  0  0      0 233276 146636 469808   0   0     0     0  516    72   2   0  98
 0  0  0      0 233276 146636 469808   0   0     0     0  516    88   2   0  97
 0  0  0      0 233276 146636 469808   0   0     0     0  516    81   2   0  97
        

ここでは1秒ごとに見本を10回取るために、vmstat 1 10コマンド を使用しました。最初に、CPU関連の統計(ussyid の各フィールド)はtopが表示したのと同じように見えます、 また、表示している詳細が若干少ないかもしれません。 ただし、topとは異なり、 CPUがどのように使用されているかの詳細を見ることもできます。

systemフィールドをよく見ると、 CPUが平均で毎秒約500の割り込みを処理していて、 毎秒80回から400回近くをプロセス間で切り替えていることがわかります。 かなりの量のアクティビティのようだと思われる場合は、もう少し考えてみてください。 システムレベルの処理(syフィールド)が 通常は1%以下であるのに対して、ユーザーレベルの処理が (usフィールド)平均でたったの2%です。 これはアイドル状態のシステムです。

Sysstatが提供しているツールを検討してみると、 iostatmpstatでは、topvmstatですでに見てきたような補足情報をほとんど提供していません。 ただし、CPU使用の監視をするときに便利な数多くのレポートをsarで 生成します。

最初のレポートはsar -qコマンドで得ることができ、 実行キューの長さ、プロセスの合計、過去1分間と5分間の平均負荷を表示します。 例をあげます。

Linux 2.4.21-1.1931.2.349.2.2.entsmp (falcon.example.com)      07/21/2003

12:00:01 AM   runq-sz  plist-sz   ldavg-1   ldavg-5
12:10:00 AM         3       122      0.07      0.28
12:20:01 AM         5       123      0.00      0.03
…
09:50:00 AM         5       124      0.67      0.65
Average:            4       123      0.26      0.26
        

この例では、システムは常にビジー状態ですが(いずれの特定時間においても 複数のrunnableプロセスが与えられている)、 過剰にロードしているわけではりません (この特定システムには複数のプロセッサがあるため)。

次のCPU関連sarレポートは、 sar -uコマンドで生成します。

Linux 2.4.21-1.1931.2.349.2.2.entsmp (falcon.example.com)      07/21/2003

12:00:01 AM       CPU     %user     %nice   %system     %idle
12:10:00 AM       all      3.69     20.10      1.06     75.15
12:20:01 AM       all      1.73      0.22      0.80     97.25
…
10:00:00 AM       all     35.17      0.83      1.06     62.93
Average:          all      7.47      4.85      3.87     83.81
        

このレポートに含まれる統計は他のツールで生成されるものと同じです。最大の利点は、sar なら進行ベースでデータを作成するため、長期的な平均やCPU使用グラフを生成するのに役に立ちます。

マルチプロセッサのシステムでは、sar -Uコマンドでプロセッサ個別の統計や全プロセッサの統計を生成できます。次は、sar -U ALLからの出力例です。

Linux 2.4.21-1.1931.2.349.2.2.entsmp (falcon.example.com)      07/21/2003

12:00:01 AM       CPU     %user     %nice   %system     %idle
12:10:00 AM         0      3.46     21.47      1.09     73.98
12:10:00 AM         1      3.91     18.73      1.03     76.33
12:20:01 AM         0      1.63      0.25      0.78     97.34
12:20:01 AM         1      1.82      0.20      0.81     97.17
…
10:00:00 AM         0     39.12      0.75      1.04     59.09
10:00:00 AM         1     31.22      0.92      1.09     66.77
Average:            0      7.61      4.91      3.86     83.61
Average:            1      7.33      4.78      3.88     84.02
        

sar -w コマンドは 1 秒ごとのコンテキストスイッチの数を報告するので、CPU サイクルが消費されている詳細情報がわかります。

Linux 2.4.21-1.1931.2.349.2.2.entsmp (falcon.example.com)      07/21/2003

12:00:01 AM   cswch/s
12:10:00 AM    537.97
12:20:01 AM    339.43
…
10:10:00 AM    319.42
Average:      1158.25
        

割り込みに関する2種類のsarレポートを生成することもできます。 "1秒ごとの割り込み"統計のみを表示するレポート (sar -I SUMコマンドを使って生成)は次のようになります。

Linux 2.4.21-1.1931.2.349.2.2.entsmp (falcon.example.com)      07/21/2003

12:00:01 AM      INTR    intr/s
12:10:00 AM       sum    539.15
12:20:01 AM       sum    539.49
…
10:40:01 AM       sum    539.10
Average:          sum    541.00
        

sar -I PROCコマンドを使うと、 割り込み状況をプロセッサごと(マルチプロセッサシステム)、 及び割り込みレベル(0から15)ごとに 分類して表示することができます。

Linux 2.4.21-1.1931.2.349.2.2.entsmp (pigdog.example.com)     07/21/2003

12:00:00 AM  CPU  i000/s  i001/s  i002/s  i008/s  i009/s  i011/s  i012/s
12:10:01 AM    0  512.01    0.00    0.00    0.00    3.44    0.00    0.00

12:10:01 AM  CPU  i000/s  i001/s  i002/s  i008/s  i009/s  i011/s  i012/s
12:20:01 AM    0  512.00    0.00    0.00    0.00    3.73    0.00    0.00
…
10:30:01 AM  CPU  i000/s  i001/s  i002/s  i003/s  i008/s  i009/s  i010/s
10:40:02 AM    0  512.00    1.67    0.00    0.00    0.00   15.08    0.00
Average:       0  512.00    0.42    0.00     N/A    0.00    6.03     N/A
        

このレポート(ページに合わせて横に切り詰めている) には各割り込みレベルごとにコラムが1つあります (例えば、i002/sフィールドは割り込みレベル2の割合を示している)。 これがマルチプロセッサシステムなら、各CPUのサンプル期間ごとに1行表示されるでしょう。

このレポートでもう1つ重要なことは、 sarは特定の割り込みフィールドに対してデータが収集されない場合、 そのフィールドを追加または削除します。 上記のレポートの例では、レポートの最後にサンプル期間の開始時にはなかった 割り込みレベル(3と10)を含んでいます。

注記注記
 

他に割り込み関連のsarレポートが2種類あります — sar -I ALLsar -I XALLです。 ただし、sadcデータ収集ユーティリティのデフォルト設定では こうしたレポートに必要な情報を収集しません。 /etc/cron.d/sysstatファイルを編集して これを変更することができます。次の行がデフォルトです。

*/10 * * * * root /usr/lib/sa/sa1 1 1
          

次のように変更します。

*/10 * * * * root /usr/lib/sa/sa1 -I 1 1
          

この変更は補足情報がsadcによって収集されるようになるため、 データファイルのサイズが大きくなるので注意してください。 従って、必ず、この追加となる容量をサポートできるようシステムの設定を確認してください。