Solaris のシステム管理 (第 2 巻)

第 36 章 性能の監視手順

この章では、vmstatiostatdf、または sar コマンドを使用してシステム性能を監視する手順について説明します。この章で説明する手順は次のとおりです。

仮想メモリーの統計情報の表示 (vmstat)

vmstat コマンドを使用すると、仮想メモリーの統計情報と、CPU の負荷、ページング、コンテキスト切替え数、デバイス割り込み、システムコールなどのシステムイベントに関する情報を表示できます。また、vmstat コマンドを使用すると、スワップ、キャッシュフラッシュ、および割り込みに関する統計情報も表示できます。

詳細は、vmstat(1M) のマニュアルページを参照してください。

仮想メモリーの統計情報を表示する方法 (vmstat)

時間間隔を指定して vmstat コマンドを使用すると、仮想メモリーの統計情報を収集します。


$  vmstat n

n

レポート間の間隔を秒単位で表した値 

表 36-1vmstat の出力内のフィールドを示します。

表 36-1 vmstat コマンドからの出力

カテゴリ 

フィールド名 

説明 

procs

 

次の状態を報告する 

 

r

ディスパッチ待ち行列内のカーネルスレッド数 

 

b

資源を待機中のブロックされたカーネルスレッド 

 

w

資源処理の完了を待機中のスワップアウトされた軽量プロセス数 

memory

 

実メモリーと仮想メモリーの使用状況を表示する 

 

swap

使用可能なスワップ空間 

 

free

空きリストのサイズ 

page

 

ページフォルトとページング動作を 1 秒当りの単位数として表示する 

 

re

回収されたページ数 

 

mf

軽度のフォルトと重大なフォルト 

 

pi

ページインされたキロバイト数 

 

po

ページアウトされたキロバイト数 

 

fr

解放されたキロバイト数 

 

de

最後にスワップインされたプロセスに必要だと予想されるメモリー 

 

sr

ページデーモンによって走査されたページ数 (現在は使用されていない)。sr が 0 以外の値であれば、ページデーモンは実行されている

disk

 

最高 4 台のディスク上のデータを示す、1 秒当りのディスク処理数を表示する 

faults

 

トラップ/割り込み率 (1 秒当り) を表示する 

 

in

1 秒当りの割り込み数 

 

sy

1 秒当りのシステムコール数 

 

cs

CPU のコンテキスト切替え率 

cpu

 

CPU 時間の使用状況を表示する 

 

us

ユーザー時間 

 

sy

システム時間 

 

id

アイドル時間

例 - 仮想メモリーの統計情報を表示する

次の例に、5 秒間隔で収集された統計情報に関する vmstat の表示を示します。


$ vmstat 5
 procs    memory            page             disk      faults     cpu
r b w  swap free re  mf  pi  po  fr de sr f0 s3 -- --  in  sy  cs us sy  id
0 0 8 28312  668  0   9   2   0   1  0  0  0  1  0  0  10  61  82  1  2  97
0 0 3 31940  248  0  10  20   0  26  0 27  0  4  0  0  53 189 191  6  6  88
0 0 3 32080  288  3  19  49   6  26  0 15  0  9  0  0  75 415 277  6 15  79
0 0 3 32080  256  0  26  20   6  21  0 12  1  6  0  0 163 110 138  1  3  96
0 1 3 32060  256  3  45  52  28  61  0 27  5 12  0  0 195 191 223  7 11  82
0 0 3 32056  260  0   1   0   0   0  0  0  0  0  0  0   4  52  84  0  1  99

システムイベント情報を表示する方法 (vmstat -s)

vmstat -s を実行すると、システムを前回ブートした後に発生した各種システムイベントの合計が表示されます。


$ vmstat -s
        0 swap ins
        0 swap outs
        0 pages swapped in
        0 pages swapped out
   392182 total address trans. faults taken
    20419 page ins
      923 page outs
    30072 pages paged in
     9194 pages paged out
    65167 total reclaims
    65157 reclaims from free list
        0 micro (hat) faults
   392182 minor (as) faults
    19383 major faults
    85775 copy-on-write faults
    66637 zero fill page faults
    46309 pages examined by the clock daemon
        6 revolutions of the clock hand
    15578 pages freed by the clock daemon
     4398 forks
      352 vforks
     4267 execs
 12926285 cpu context switches
109029866 device interrupts
   499296 traps
 22461261 system calls
   778068 total name lookups (cache hits 97%)
    18739 user   cpu
    34662 system cpu
 52051435 idle   cpu
    25252 wait   cpu

スワップの統計情報を表示する方法 (vmstat -S)

vmstat -S を実行すると、スワップの統計情報が表示されます。


$ vmstat -S
 procs     memory            page            disk          faults      cpu
 r b w   swap  free  si  so pi po fr de sr f0 s0 s6 --   in   sy   cs us sy id
 0 0 0 200968 17936   0   0  0  0  0  0  0  0  0  0  0  109   43   24  0  0 100

表 36-2 にフィールドを示します。

表 36-2 vmstat -S コマンドからの出力

フィールド 

説明 

si

1 秒当りにスワップされた平均軽量プロセス数 

so

スワップアウトされた全プロセス数 


注 -

vmstat コマンドは、これらの両フィールドを出力しません。スワップ統計情報の詳細情報を表示するには、sar コマンドを使用してください。


キャッシュフラッシュの統計情報を表示する方法 (vmstat -c)

vmstat -c を実行すると、仮想キャッシュのキャッシュフラッシュ統計情報が表示されます。


$ vmstat -c
usr     ctx     rgn     seg     pag     par
  0   60714       5  134584 4486560 4718054

このコマンドを実行すると、前回のブート後に発生したキャッシュフラッシュの合計数が表示されます。表 36-3 にキャッシュタイプを示します。

表 36-3 vmstat -c コマンドからの出力

キャッシュ名 

キャッシュタイプ 

usr

ユーザー 

ctx

コンテキスト 

rgn

領域 

seg

セグメント 

pag

ページ 

par

ページの一部 

各デバイス当りの割り込み数を表示する方法 (vmstat -i)

vmstat -i を実行すると、各デバイス当りの割り込み数が表示されます。


$ vmstat -i

例 - 各デバイス当りの割り込み数を表示する

次の例は、vmstat -i コマンドからの出力を示します。


$ vmstat -i
interrupt         total     rate
--------------------------------
clock          52163269      100
esp0            2600077        4
zsc0              25341        0
zsc1              48917        0
cgsixc0             459        0
lec0             400882        0
fdc0                 14        0
bppc0                 0        0
audiocs0              0        0
--------------------------------
Total          55238959      105

ディスク使用状況の表示 (iostat n)

iostat コマンドを使用すると、ディスクの入出力に関する統計情報を表示し、スループット、使用率、待ち行列の長さ、トランザクション率、サービス時間の計測結果を表示できます。このコマンドの詳細は、iostat(1M) のマニュアルページを参照してください。

ディスクの使用状況を表示する方法 (iostat)

時間間隔を指定して iostat コマンドを使用すると、ディスク動作情報を表示できます。


$ iostat 5
     tty          fd0           sd3          nfs1         nfs31          cpu
tin tout kps tps serv  kps tps serv  kps tps serv  kps tps serv  us sy wt id
  0    1   0   0  410    3   0   29    0   0    9    3   0   47   4  2  0 94

出力の 1 行目は、前回のブート以降の統計情報を示します。2 行目以降は、時間間隔ごとの統計情報を示します。デフォルトでは、端末 (tty)、ディスク (fdsd)、CPU (cpu) の統計情報が表示されます。

表 36-4iostat コマンド出力内のフィールドを示します。

表 36-4 iostat n コマンドからの出力

統計情報の対象 

フィールド 

説明 

端末 

 

 

 

tin

端末の入力待ち行列内の文字数 

 

tout

端末の出力待ち行列内の文字数 

ディスク 

 

 

 

bps

1 秒当りのブロック数 

 

tps

1 秒当りのトランザクション数 

 

serv

ミリ秒単位の平均サービス時間 

CPU  

 

 

 

us

ユーザーモード 

 

sy

システムモード 

 

wt

入出力待機中 

 

id

アイドル状態 

例 - ディスクの使用状況を表示する

次の例は、5 秒間隔で収集されるディスク統計情報を示します。


$ iostat 5
tty        sd0           sd6           nfs1         nfs49           cpu
tin tout kps tps serv  kps tps serv  kps tps serv  kps tps serv  us sy wt id
 0    0   1   0   49    0   0    0    0   0    0    0   0   15   0  0  0 100
 0   47   0   0    0    0   0    0    0   0    0    0   0    0   0  0  0 100
 0   16   0   0    0    0   0    0    0   0    0    0   0    0   0  0  0 100
 0   16   0   0    0    0   0    0    0   0    0    0   0    0   0  0  0 100
 0   16  44   6  132    0   0    0    0   0    0    0   0    0   0  0  1 99
 0   16   0   0    0    0   0    0    0   0    0    0   0    0   0  0  0 100
 0   16   0   0    0    0   0    0    0   0    0    0   0    0   0  0  0 100
 0   16   0   0    0    0   0    0    0   0    0    0   0    0   0  0  0 100
 0   16   0   0    0    0   0    0    0   0    0    0   0    0   0  0  0 100
 0   16   0   0    0    0   0    0    0   0    0    0   0    0   0  0  0 100
 0   16   3   1   23    0   0    0    0   0    0    0   0    0   0  0  1 99
 0   16   0   0    0    0   0    0    0   0    0    0   0    0   0  0  0 100
 0   16   0   0    0    0   0    0    0   0    0    0   0    0   0  0  0 100
 0   16   0   0    0    0   0    0    0   0    0    0   0    0   0  0  0 100

拡張ディスク統計情報を表示する方法 (iostat -xtc)

iostat -xtc を実行すると、拡張ディスク統計情報が表示されます。


$ iostat -xtc
                  extended device statistics                      tty         cpu
device       r/s    w/s   kr/s   kw/s wait actv  svc_t  %w  %b  tin tout  us sy wt id
fd0          0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0    0    0   0  0  0 100
sd0          0.0    0.0    0.4    0.4  0.0  0.0   49.5   0   0 
sd6          0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0 
nfs1         0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0 
nfs49        0.0    0.0    0.0    0.0  0.0  0.0   15.1   0   0 
nfs53        0.0    0.0    0.4    0.0  0.0  0.0   24.5   0   0 
nfs54        0.0    0.0    0.0    0.0  0.0  0.0    6.3   0   0 
nfs55        0.0    0.0    0.0    0.0  0.0  0.0    4.9   0   0 

このコマンドは、ディスクごとに 1 行ずつ出力を表示します。表 36-5 は、出力フィールドを示します。

表 36-5 iostat -xtc コマンドからの出力

フィールド名 

説明 

r/s

1 秒当りの読み取り数 

w/s

1 秒当りの書き込み数 

Kr/s

1 秒当りの読み取りキロバイト数 

Kw/s

1 秒当りの書き込みキロバイト数 

wait

サービス (待ち行列の長さ) を待機中の平均トランザクション数 

actv

サービス中の平均トランザクション数 

svc_t

ミリ秒単位で表した平均サービス時間 

%w

待ち行列が空でない時間の割合 

%b

ディスクがビジーである時間の割合 

ディスク使用統計の表示 (df)

df コマンドを使用すると、マウントされている各ディスク上の空きディスク容量が表示されます。レポート用の統計情報では使用可能容量の合計の内先頭に 10% の空き容量を残しておくので、df から報告される「使用可能」ディスク容量は全容量の 90% のみに相当します。この先頭の空き容量は、性能を高めるために常に空になっています。

実際に df からレポートされるディスク容量の割合は、使用済み容量を使用可能容量で割った値です。

ファイルシステムの容量が 90% を超える場合は、cp を使用して空いているディスクにファイルを転送するか、tar または cpio を使用してテープに転送するか、ファイルを削除してください。

このコマンドの詳細は、df(1M) のマニュアルページを参照してください。

ファイルシステム情報を表示する方法 (df)

df -k コマンドを使用すると、ファイルシステム情報がキロバイト単位で表示されます。


$ df -k
Filesystem            kbytes    used   avail capacity  Mounted on
/dev/dsk/c0t3d0s0     192807   40231  133296    24%    / 

表 36-6 は、df -k コマンドの出力を示します。

表 36-6 df -k コマンドからの出力

フィールド名 

説明 

kbytes

ファイルシステム内の使用可能容量の合計 

used

使用されている容量 

avail

使用可能容量 

capacity

使用されている容量が全容量に占める割合 

mounted on

マウントポイント 

例 - ファイルシステム情報を表示する

次の例に、df -k コマンドからの出力を示します。


$ df -k
/dev/dsk/c0t0d0s0     192807   49043  124484    29%    /
/dev/dsk/c0t0d0s6    1190551  680444  450580    61%    /usr
/proc                      0       0       0     0%    /proc
fd                         0       0       0     0%    /dev/fd
mnttab                     0       0       0     0%    /etc/mnttab
swap                  198056       0  198056     0%    /var/run
swap                  198064       8  198056     1%    /tmp
/dev/dsk/c0t0d0s5     192807    2031  171496     2%    /opt
/dev/dsk/c0t0d0s7     217191       9  195463     1%    /export/home
venus:/usr/dist    20612581 13237316 6963015    66%    /usr/dist

システム動作の監視 (sar)

sar コマンドは、次の目的で使用します。

このコマンドの詳細は、sar(1) のマニュアルページを参照してください。

ファイルアクセスをチェックする方法 (sar -a)

sar -a コマンドを使用すると、ファイルアクセス操作の統計情報が表示されます。


$ sar -a
SunOS venus 5.8 Generic sun4u    09/07/99

00:00:00  iget/s namei/s dirbk/s
01:00:00       0       0       0
02:00:02       0       0       0
03:00:00       0       1       0
04:00:00       0       0       0
05:00:01       0       0       0
06:00:00       0       0       0

Average        0       1       0

表 36-7 に、レポートされるオペレーティングシステムのルーチンを示します。

表 36-7 sar -a コマンドからの出力

フィールド名 

説明 

iget/s

ディレクトリ名検索キャッシュ (dnlc) 内に入っていない i ノードに対して出された要求数

namei/s

1 秒当りのファイルシステムパスの検索数。nameidnlc 内にディレクトリ名が見つからない場合は、iget が呼び出され、ファイルまたはディレクトリの i ノードが取得される。したがって、ほとんどの igetsdnlc が欠落した結果である

dirbk/s

1 秒間に実行されたディレクトリブロックの読み取り回数 

表示される値が大きいほど、カーネルはユーザーファイルへのアクセスに長い時間を費やしています。この時間には、プログラムとアプリケーションによるファイルシステムの使用量が反映されます。-a オプションを使用すると、アプリケーションのディスク依存度を表示できるので便利です。

バッファー動作をチェックする方法 (sar -b)

sar -b コマンドを使用すると、バッファー動作の統計情報が表示されます。

バッファーは、i ノード、シリンダグループブロック、間接ブロックなどのメタデータをキャッシュに書き込むために使用されます。


$ sar -b
00:00:00 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s
01:00:00       0       0     100       0       0      55       0       0

表 36-8 は、-b オプションを指定したときに表示されるバッファー動作を示します。最も重要なエントリは、キャッシュヒット率 %rcache%wcache です。この 2 つのエントリは、システムバッファーリングの効率を測定します。%rcache が 90 未満の場合や、%wcache が 65 未満の場合は、バッファー領域を大きくすれば性能を改善できる可能性があります。

表 36-8 sar -b コマンドからの出力

フィールド名 

説明 

bread/s

ディスクからバッファーキャッシュに投入された 1 秒当りの平均読み取り数 

lread/s

バッファーキャッシュからの 1 秒当りの平均論理読み取り数 

%rcache

バッファーキャッシュ内で見つかった論理読み込み数の小数部 (lread/s に対する bread/s の比を 100% から差し引いた値)

bwrit/s

バッファーキャッシュからディスクに書き込まれた 1 秒当りの平均物理ブロック数 (512 ブロック) 

lwrite/s

バッファーキャッシュへの 1 秒当りの平均論理書き込み数 

%wcache

バッファーキャッシュ内で見つかった論理書き込み数の小数部 (lwrit/s に対する bwrit/s の比を 100% から差し引いた値)

pread/s

キャラクタ型デバイスインタフェースを使用する 1 秒当りの平均物理読み取り数 

pwrit/s

キャラクタ型デバイスインタフェースを使用する 1 秒当りの平均物理書き込み要求数 

例 - バッファー動作をチェックする

次の sar -b 出力の例は、すべてのデータは許容範囲に収まっているので、%rcache バッファーと %wcache バッファーが処理速度低下の原因ではないことを示します。


$ sar -b
SunOS venus 5.8 Generic sun4u    09/07/99

00:00:00 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s
01:00:00       0       0     100       0       0      55       0       0
02:00:02       0       0     100       0       0      55       0       0
03:00:00       0       0     100       0       0      72       0       0
04:00:00       0       0     100       0       0      56       0       0
05:00:01       0       0     100       0       0      55       0       0
06:00:00       0       0     100       0       0      55       0       0

Average        0       0      94       0       0      64       0       0

システムコールの統計情報をチェックする方法 (sar -c)

sar -c コマンドを使用すると、システムコールの統計情報が表示されます。


$ sar -c
00:00:00 scall/s sread/s swrit/s  fork/s  exec/s rchar/s wchar/s
01:00:00      38       2       2    0.00    0.00     149     120

表 36-9 に、-c オプションでレポートされる次のシステムコールのカテゴリを示します。一般に、readswrites はシステムコール合計の約半分ですが、割合はシステムで実行中の動作によって大幅に変動します。

表 36-9 sar -c コマンドからの出力

フィールド名 

説明 

scall/s

1 秒当りのすべてのタイプのシステムコール数 (通常は、ビジーな 4 ないし 6 ユーザーのシステム上で 1 秒当り約 30) 

sread/s

1 秒当りの read システムコール数

swrit/s

1 秒当りの write システムコール数

fork/s

1 秒当りの fork システムコール数 (4 ないし 6 ユーザーのシステム上で毎秒約 0.5)。この数値は、シェルスクリプトの実行中は大きくなる

exec/d

1 秒当りの exec システムコール数。exec/sfork/s で割った値が 3 より大きい場合は、効率の悪い PATH 変数を調べる

rchar/s

read システムコールによって転送される 1 秒当りの文字 (バイト) 数

wchar/s

write システムコールによって転送される 1 秒当りの文字 (バイト) 数

例 - システムコールの統計情報をチェックする

次の例に、sar -c コマンドからの出力を示します。


$ sar -c
SunOS venus 5.8 Generic sun4u    09/07/99

00:00:00 scall/s sread/s swrit/s  fork/s  exec/s rchar/s wchar/s
01:00:00      38       2       2    0.00    0.00     149     120
02:00:02      38       2       2    0.00    0.00     149     120
03:00:00      42       2       2    0.05    0.05     218     147
04:00:00      39       2       2    0.01    0.00     155     123
05:00:01      38       2       2    0.00    0.00     150     120
06:00:00      38       2       2    0.01    0.00     149     120

Average       50       4       3    0.02    0.02     532     238

ディスク動作をチェックする方法 (sar -d)

sar -d コマンドを使用すると、ディスク動作の統計情報が表示されます。


$ sar -d
00:00:00   device        %busy   avque   r+w/s  blks/s  avwait  avserv

01:00:00   fd0               0     0.0       0       0     0.0     0.0

表 36-10 は、-d オプションを使用したときに表示されるディスクデバイス動作を示します。待ち行列内に何かがあるときは、待ち行列の長さと待ち時間が計測されるので注意してください。%busy の値が小さい場合に、待ち行列とサービス時間が大きければ、変更されたブロックをディスクに随時書き込むために、システムが定期的に処理していることを示す場合があります。

表 36-10 sar -d コマンドからの出力

フィールド名 

説明 

device

監視中のディスクデバイス名 

%busy

デバイスが転送要求のサービスに費やす時間の割合 

avque

平均待ち時間と平均サービス時間の合計 

r+w/s

デバイスへの 1 秒当りの読み取り転送数と書き込み転送数 

blks/s

デバイスに転送される 1 秒当りの 512 バイトブロック数 

avwait

待ち行列内でアイドル状態で待機中の要求を転送する平均ミリ秒数 (待ち行列に要求が入っているときのみ計測) 

avserv

デバイスが転送要求を完了するまでの平均ミリ秒数 (ディスクの場合は、この値にシークタイム、回転待ち時間、データ転送時間が含まれる) 

例 - ディスク動作をチェックする

次の例は、sar -d コマンドからの一部省略した出力を示します。


$ sar -d
SunOS venus 5.8 Generic sun4u    09/07/99

00:00:00   device        %busy   avque   r+w/s  blks/s  avwait  avserv

01:00:00   fd0               0     0.0       0       0     0.0     0.0
           nfs1              0     0.0       0       0     0.0     0.0
           sd0               0     0.0       0       0     0.0    39.6
           sd0,a             0     0.0       0       0     0.0    39.6
           sd0,b             0     0.0       0       0     0.0     0.0
           sd0,c             0     0.0       0       0     0.0     0.0
           sd0,f             0     0.0       0       0     0.0     0.0
           sd0,g             0     0.0       0       0     0.0     0.0
           sd0,h             0     0.0       0       0     0.0     0.0
           sd6               0     0.0       0       0     0.0     0.0

ページアウトとメモリーをチェックする方法 (sar -g)

sar -g オプションを使用すると、ページアウトとメモリー解放動作が (平均値として) 表示されます。


$ sar -g
00:00:00  pgout/s ppgout/s pgfree/s pgscan/s %ufs_ipf
01:00:00     0.00     0.00     0.00     0.00     0.00

sar -g で表示される出力は、より多くのメモリーが必要かどうかを判断するのに役立ちます。ps -elf コマンドを使用すると、ページデーモンに使用される CPU サイクル数が表示されます。サイクル数が大きく、pgfree/spgscan/s の値が大きければ、メモリー不足を示します。

また、sar -g を使用すると、i ノードの再利用間隔が短すぎるために、再利用可能なページが失われているかどうかも表示されます。

表 36-11 に、-g オプションからの出力を示します。

表 36-11 sar -g コマンドからの出力

フィールド名 

説明 

pgout/s

1 秒間にページアウトされた要求数 

ppgout/s

1 秒間に実際にページアウトされたページ数 (1 つのページアウト要求で複数のページがページアウトされることがある) 

pgfree/s

空きリストに配置された 1 秒当りのページ数 

pgscan/s

ページデーモンによって走査された 1 秒当りのページ数。この値が大きい場合は、ページデーモンが空きメモリーのチェックに大量の時間を費やしている。これは、メモリーを増やす必要があることを示す

%ufs_ipf

ufs がそれに関連付けられた再使用可能ページを持つ iget によって空きリストから取り出された割合。これらのページはフラッシュされ、プロセスが回収できなくなる。したがって、これはページフラッシュを伴う igets の割合である。値が大きければ、i ノードの空きリストがページ境界であり、ufs の i ノード数を増やす必要があることを示す

例 - ページアウトとメモリーをチェックする

次の例に、sar -g コマンドからの出力を示します。


$ sar -g
SunOS venus 5.8 Generic sun4u    09/07/99

00:00:00  pgout/s ppgout/s pgfree/s pgscan/s %ufs_ipf
01:00:00     0.00     0.00     0.00     0.00     0.00
02:00:02     0.00     0.00     0.00     0.00     0.00
03:00:00     0.00     0.01     0.01     0.00     0.00
04:00:00     0.00     0.00     0.00     0.00     0.00
05:00:01     0.00     0.00     0.00     0.00     0.00
06:00:00     0.00     0.00     0.00     0.00     0.00

Average      0.01     0.12     0.21     0.66     0.00

カーネルメモリーの割り当てをチェックする方法 (sar -k)

sar -k コマンドを使用すると、Kernel Memory Allocator (KMA) に関して次の動作が表示されます。

KMA を使用すると、カーネルサブシステムは必要に応じてメモリーを割り当て、解放できます。最大量のメモリーを静的に割り当てるのではなく、ピークを下回る負荷を要求するのが予想されるため、KMA はメモリー要求を「小」 (256 バイト未満)、「大」 (512 バイト〜 4K バイト)、「サイズ超過」 (4K バイト超) という 3 つのカテゴリに分けます。また、2 つのメモリープールを管理して、「小」要求と「大」要求を満たします。「サイズ超過」要求は、システムページアロケータからメモリーを割り当てることで満たされます。

KMA 資源を使用するドライブや STREAMS の作成に使用中のシステムを調査する場合は、sar -k を使用すると便利です。それ以外の場合は、このコマンドで提供される情報は不要です。KMA 資源を使用するが、終了前には特に資源を返さないドライバやモジュールがあると、メモリーのリークが生じることがあります。メモリーリークが発生すると、KMA によって割り当てられるメモリーは時間が経つにつれて増大します。したがって、sar -kalloc フィールドの値が時間が経つにつれ増える場合は、メモリーリークの可能性があります。メモリーリークのもう 1 つの兆候は、要求が失敗することです。この問題が発生した場合は、メモリーリークのために KMA がメモリーを予約したり割り当てたりできなくなっている可能性があります。

メモリーリークが発生した場合は、KMA からメモリーを要求したが返していないドライバや STREAMS がないかどうかをチェックする必要があります。


$ sar -k
00:00:00 sml_mem   alloc  fail  lg_mem   alloc   fail  ovsz_alloc  fail
01:00:00 2523136 1866512     0 18939904 14762364    0      360448     0
02:00:02 2523136 1861724     0 18939904 14778748    0      360448     0

表 36-12 に、-k オプションからの出力を示します。

表 36-12 sar -k コマンドからの出力

フィールド名 

説明 

sml_mem

KMA が小メモリー要求プール内で使用できるメモリーのバイト数 (小要求は 256 バイト未満) 

alloc

KMA が小メモリー要求プールから小メモリー要求に割り当てたメモリーのバイト数 

fail

小量のメモリーで失敗した要求数 

lg_mem

KMA が大メモリー要求プール内で使用できるメモリーのバイト数 (大要求は 512 バイトから 4K バイトまで) 

alloc

KMA が大メモリー要求プールから大メモリー要求に割り当てたメモリーのバイト数 

fail

大メモリーで失敗した要求数 

ovsz_alloc

サイズ超過要求 (4K バイトを超える要求) に割り当てられたメモリーの容量。これらの要求はページアロケータによって満たされるので、プールはない 

fail

サイズ超過メモリーで失敗した要求数 

例 - カーネルメモリーの割り当てをチェックする (sar)

次の例は、sar -k 出力を示します。


$ sar -k
SunOS venus 5.8 Generic sun4u    09/07/99

00:00:00 sml_mem   alloc  fail  lg_mem   alloc  fail  ovsz_alloc  fail
01:00:00 2523136 1866512     0 18939904 14762364     0      360448     0
02:00:02 2523136 1861724     0 18939904 14778748     0      360448     0
03:00:00 2523136 1865664     0 18939904 14745884     0      360448     0
04:00:00 2523136 1867692     0 18939904 14746616     0      360448     0
05:00:01 2523136 1867208     0 18939904 14763700     0      360448     0
06:00:00 2523136 1867772     0 18939904 14779444     0      360448     0

Average  2724096 1791806     0 20089344 15434591     0      360448     0

プロセス間通信をチェックする方法 (sar -m)

sar -m コマンドを使用すると、プロセス間通信の動作が表示されます。


$ sar -m 
00:00:00   msg/s  sema/s
01:00:00    0.00    0.00

通常、これらの数字は、メッセージやセマフォを使用するアプリケーションを実行していない限りゼロ (0.00) です。

表 36-13 に、-m オプションからの出力を示します。

表 36-13 sar -m コマンドからの出力

フィールド名 

説明 

msg/s

1 秒当りのメッセージ処理 (送受信) 数 

sema/s

1 秒当りのセマフォ処理数 

例 - プロセス間通信をチェックする

次の例は、sar -m コマンドからの一部省略した出力を示します。


$ sar -m
SunOS venus 5.8 Generic sun4u    09/07/99

00:00:00   msg/s  sema/s
01:00:00    0.00    0.00
02:00:02    0.00    0.00
03:00:00    0.00    0.00
04:00:00    0.00    0.00
05:00:01    0.00    0.00
06:00:00    0.00    0.00

Average     0.00    0.00

ページイン動作をチェックする方法 (sar -p)

sar -p コマンドを使用すると、保護フォルトや変換フォルトを含むページイン動作が表示されます。


$ sar -p
00:00:00  atch/s  pgin/s ppgin/s  pflt/s  vflt/s slock/s
01:00:00    0.07    0.00    0.00    0.21    0.39    0.00

表 36-14 は、-p オプションを指定したときに表示される統計情報を示します。

表 36-14 sar -p コマンドからの出力

フィールド名 

説明 

atch/s

現在メモリーに入っているページを回収して満たされる 1 秒当りのページフォルト数 (1 秒当りの付加数)。この例には、空きリストから無効なページを回収し、別のプロセスに現在使用中のテキストページを共有する処理が含まれる (たとえば、複数のプロセスが同じプログラムテキストにアクセスしている場合など) 

pgin/s

ファイルシステムがページイン要求を受信する 1 秒当りの回数 

ppgin/s

ページインされる 1 秒当りのページ数。ソフトロック要求 (slock/s を参照) などの 1 つのページイン要求や、大型ブロックサイズでは、複数のページがページインされることがある

pflt/s

保護エラーによるページフォルト数。保護フォルトの例には、ページへの不正なアクセスや、「書き込み時コピー」などがある。通常、この数値は主に「書き込み時コピー」からなっている 

vflt/s

1 秒当りのアドレス変換ページフォルト数。これは、有効性フォルトと呼ばれ、所定の仮想アドレスに有効なプロセステーブルエントリが存在しないときに発生する 

slock/s

物理入出力を要求するソフトウェアロック要求によって発生する 1 秒当りのフォルト数。ソフトロック要求の発生例には、ディスクからメモリーへのデータ転送などがある。システムはデータを受信しないページをロックするので、別のプロセスはそれを回収して使用できない 

例 - ページイン動作をチェックする

次の例は、sar -p からの一部省略した出力を示します。


$ sar -p
SunOS venus 5.8 Generic sun4u    09/07/99

00:00:00  atch/s  pgin/s ppgin/s  pflt/s  vflt/s slock/s
01:00:00    0.07    0.00    0.00    0.21    0.39    0.00
02:00:02    0.07    0.00    0.00    0.21    0.39    0.00
03:00:00    0.32    0.00    0.00    1.10    2.48    0.00
04:00:00    0.09    0.00    0.00    0.32    0.57    0.00
05:00:01    0.07    0.00    0.00    0.21    0.39    0.00
06:00:00    0.07    0.00    0.00    0.21    0.39    0.00

Average     0.26    0.20    0.30    0.92    1.78    0.00

待ち行列動作をチェックする方法 (sar -q)

sar -q コマンドを使用すると、待ち行列に要求が入っている平均待ち行列の長さと、その間の時間の割合が表示されます。


$ sar -q
00:00:00 runq-sz %runocc swpq-sz %swpocc
01:00:00

注 -

システムに空きメモリーが十分ない場合でも、スワップアウトされた軽量プロセス数が 0 より大きい場合があります。この状態は、休眠中の軽量プロセスがスワップアウトされ処理されない場合 (プロセスや軽量プロセスが休眠中であり、キーボードやマウスの入力を待機中の場合など) に発生します。


表 36-15 は、-q オプションを指定する場合の出力を示します。

表 36-15 sar -q コマンドの出力

フィールド名 

説明 

runq-sz

CPU を実行するためにメモリー内で待機中のカーネルスレッド数。通常、この値は 2 未満になる。値が常に 2 より大きい場合は、システムが CPU の限界に到達している可能性がある 

%runocc

ディスパッチ待ち行列が使用されている時間の割合 

swpq-sz

スワップアウトされた平均軽量プロセス数 

%swpocc

軽量プロセスがスワップアウトされた時間の割合 

例 - 待ち行列動作をチェックする

次の例は、sar -q コマンドからの一部省略した出力を示します。%runocc の値が大きく (90 パーセント超)、runq-sz が 2 より大きい場合は、CPU の負荷が大きく、応答速度が低下しています。この場合は、CPU の容量を増やしてシステムの応答速度を適正化する必要があります。


$ sar -q
SunOS venus 5.8 Generic sun4u    09/07/99

00:00:00 runq-sz %runocc swpq-sz %swpocc
01:00:00                                
02:00:02                                
03:00:00     1.0       0                
04:00:00                                
05:00:01     1.0       0                
06:00:00

Average      1.3       0  

未使用のメモリーをチェックする方法 (sar -r)

sar -r コマンドを使用すると、現在使用されていないメモリーページ数とスワップファイルのディスクブロック数が表示されます。


$ sar -r
00:00:00 freemem freeswap
01:00:00    2135   401922

表 36-16 は、-r オプションを使用する場合の出力を示します。

表 36-16 sar -r コマンドからの出力

フィールド名 

説明 

freemem

コマンドによるサンプル収集間隔の間にユーザープロセスに利用できる平均メモリーページ数。ページサイズはマシンに応じて異なる 

freeswap

ページスワップに使用可能な 512 バイトのディスクブロック数 

例 - 未使用のメモリーをチェックする

次の例は、sar -r コマンドからの出力を示します。


$ sar -r
SunOS venus 5.8 Generic sun4u    09/07/99

00:00:00 freemem freeswap
01:00:00    2135   401922
02:00:02    2137   401949
03:00:00    2137   402006
04:00:00    2139   401923
05:00:01    2138   402033
06:00:00    2137   401919

Average     2500   399914

CPU の使用状況をチェックする方法 (sar -u)

sar -u コマンドを使用すると、CPU の使用状況が表示されます。


$ sar -u
00:00:00    %usr    %sys    %wio   %idle
01:00:00       0       0       0     100

(オプションを指定しない sar コマンドは、sar -u と同じです)。所定の瞬間に、プロセッサはビジー状態またはアイドル状態になっています。ビジー状態のときは、プロセッサはユーザーモードまたはシステムモードになっています。アイドル状態のときは、プロセッサは入出力の完了を待っているか、何も処理することがないので「待機」している状態です。

表 36-17 は、-u オプションを使用する場合の出力を示します。

表 36-17 sar -u コマンドからの出力

フィールド名 

説明 

%sys

プロセッサがシステムモードになっている時間の割合が表示される 

%user

プロセッサがユーザーモードになっている時間の割合が表示される 

%wio

プロセッサがアイドル状態で入出力の完了を待っている時間の割合が表示される 

%idle

プロセッサがアイドル状態で入出力を待っていない時間の割合が表示される 

一般に、%wio の値が大きい場合は、ディスクの処理速度が低下していることを意味します。

例 - CPU の使用状況をチェックする

次の例は、sar -u コマンドからの出力を示します。


$ sar -u
SunOS venus 5.8 Generic sun4u    09/07/99

00:00:00    %usr    %sys    %wio   %idle
01:00:00       0       0       0     100
02:00:02       0       0       0     100
03:00:00       0       0       0     100
04:00:00       0       0       0     100
05:00:01       0       0       0     100
06:00:00       0       0       0     100
07:00:00       0       0       0     100
08:00:01       0       0       0     100
08:20:00       0       0       0     100
08:40:00       0       0       0     100
09:00:00       0       0       0     100
09:20:00       0       0       0     100
09:40:00       0       0       0     100
10:00:00       0       0       0     100
10:20:00       0       0       0     100
10:40:01       0       0       0     100
11:00:00       5       2      10      82

Average        0       0       0     100

システムテーブルの状態をチェックする方法 (sar -v)

sar -v コマンドを使用すると、プロセステーブル、i ノードテーブル、ファイルテーブル、および共有メモリーレコードテーブルの状態が表示されます。


$ sar -v
00:00:00  proc-sz    ov  inod-sz    ov  file-sz    ov   lock-sz
01:00:00   43/922     0 2984/4236    0  322/322     0    0/0   

表 36-18 は、-v オプションを使用する場合の出力を示します。

表 36-18 sar -v コマンドからの出力

フィールド名 

説明 

proc-sz

現在カーネル内で使用されているか、割り当てられているプロセスエントリ (proc 構造) の数

inod-sz

メモリー内の合計 i ノード数とカーネル内で割り当て済みの最大 i ノード数の比。これは厳密な上限ではなく、超えることもできる 

file-sz

開いているシステムファイルテーブルのサイズ。ファイルテーブルには領域が動的に割り当てられるので、sz0 として表示される

ov

現在カーネル内で使用されているか割り当てられている共有メモリーレコードテーブルのエントリ数。共有メモリーレコードテーブルには領域が動的に割り当てられるので、sz0 として表示される

lock-sz

現在カーネル内で使用されているか割り当てられている共有メモリーレコードテーブルのエントリ数。共有メモリーレコードテーブルには領域が動的に割り当てられるので、sz0 として表示される

例 - システムテーブルの状態をチェックする

次の例は、sar -v コマンドからの一部省略した出力を示します。この例は、すべてのテーブルに十分なサイズがあり、オーバーフローは発生しないことを示します。これらのテーブルには、いずれも物理メモリーの容量に基づいて領域が動的に割り当てられます。


$ sar -v
SunOS venus 5.8 Generic sun4u    09/07/99

00:00:00  proc-sz    ov  inod-sz    ov  file-sz    ov   lock-sz
01:00:00   43/922     0 2984/4236    0  322/322     0    0/0   
02:00:02   43/922     0 2984/4236    0  322/322     0    0/0   
03:00:00   43/922     0 2986/4236    0  323/323     0    0/0   
04:00:00   43/922     0 2987/4236    0  322/322     0    0/0   
05:00:01   43/922     0 2987/4236    0  322/322     0    0/0   
06:00:00   43/922     0 2987/4236    0  322/322     0    0/0   

スワップ動作をチェックする方法 (sar -w)

sar -w コマンドを使用すると、スワッピングと切り替え動作が表示されます。


$ sar -w
00:00:00 swpin/s bswin/s swpot/s bswot/s pswch/s
01:00:00    0.00     0.0    0.00     0.0      22

表 36-19 は、目標の値と規則を示します。

表 36-19 sar -w コマンドからの出力

フィールド名 

説明 

swpin/s

メモリーに転送される 1 秒当りの軽量プロセス数 

bswin/s

メモリーからスワップアウトされる 1 秒当りの平均プロセス数。この数値が 1 より大きい場合は、メモリーを増やす必要がある 

swpot/s

メモリーからスワップアウトされる 1 秒当りの平均プロセス数。この数値が 1 より大きい場合は、メモリーを増やす必要がある 

bswot/s

スワップアウト用に転送される 1 秒当りのブロック数 

pswch/s

1 秒当りのカーネルスレッド切り替え数 


注 -

すべてのプロセスのスワップインには、プロセスの初期化が含まれます。


例 - スワップ動作をチェックする

次の例は、sar -w コマンドからの出力を示します。


$ sar -w
SunOS venus 5.8 Generic sun4u    09/07/99

00:00:00 swpin/s bswin/s swpot/s bswot/s pswch/s
01:00:00    0.00     0.0    0.00     0.0      22
02:00:02    0.00     0.0    0.00     0.0      22
03:00:00    0.00     0.0    0.00     0.0      22
04:00:00    0.00     0.0    0.00     0.0      22
05:00:01    0.00     0.0    0.00     0.0      22
06:00:00    0.00     0.0    0.00     0.0      22
07:00:00    0.00     0.0    0.00     0.0      22
08:00:01    0.00     0.0    0.00     0.0      22
08:20:00    0.00     0.0    0.00     0.0      22
08:40:00    0.00     0.0    0.00     0.0      22
09:00:00    0.00     0.0    0.00     0.0      22
09:20:00    0.00     0.0    0.00     0.0      22
09:40:00    0.00     0.0    0.00     0.0      22
10:00:00    0.00     0.0    0.00     0.0      22
10:20:00    0.00     0.0    0.00     0.0      22
10:40:01    0.00     0.0    0.00     0.0      23
11:00:00    0.00     0.0    0.00     0.0     144

Average     0.00     0.0    0.00     0.0      24

端末動作をチェックする方法 (sar -y)

sar -y コマンドを使用すると、端末デバイスの動作を監視できます。


$ sar -y
00:00:00 rawch/s canch/s outch/s rcvin/s xmtin/s mdmin/s
01:00:00       0       0       0       0       0       0

大量の端末入出力がある場合は、このレポートを使用して不良な行がないかどうかを判別できます。表 36-20 は、記録される動作の定義を示します。

表 36-20 sar -y コマンドからの出力

フィールド名 

説明 

rawch/s

1 秒当りの入力文字数 (raw 待ち行列) 

canch/s

標準待ち行列で処理される 1 秒当りの文字数 

outch/s

1 秒当りの出力文字数 (出力待ち行列) 

rcvin/s

1 秒当りの受信側ハードウェア割り込み数 

xmtin/s

1 秒当りの送信側ハードウェア割り込み数 

mdmin/s

1 秒当りのモデム割り込み数 

1 秒当りのモデム割り込み数 (mdmin/s) は 0 に近く、1 秒当りの送受信割り込み数 (xmtin/srcvin/s) は、それぞれ着信または発信文字数以下になるはずです。そうでない場合は、不良回線がないかどうかをチェックしてください。

例 - 端末動作をチェックする

次の例は、sar -y コマンドからの一部省略した出力を示します。


$ sar -y
SunOS venus 5.8 Generic sun4u    09/07/99

00:00:00 rawch/s canch/s outch/s rcvin/s xmtin/s mdmin/s
01:00:00       0       0       0       0       0       0
02:00:02       0       0       0       0       0       0
03:00:00       0       0       0       0       0       0
04:00:00       0       0       0       0       0       0
05:00:01       0       0       0       0       0       0
06:00:00       0       0       0       0       0       0
07:00:00       0       0       0       0       0       0
08:00:01       0       0       0       0       0       0
08:20:00       0       0       0       0       0       0
08:40:00       0       0       0       0       0       0
09:00:00       0       0       0       0       0       0
09:20:00       0       0       0       0       0       0
09:40:00       0       0       0       0       0       0
10:00:00       0       0       0       0       0       0
10:20:00       0       0       0       0       0       0
10:40:01       0       0      20       0       0       0

Average        0       0       3       0       0       0

システム全体の性能をチェックする方法 (sar -A)

sar -A コマンドを使用すると、システム全体の性能が表示されます。

このコマンドを使用すると、全体像を把握できます。複数のタイムセグメントからのデータが表示される場合は、レポートに平均値が含まれます。

システム動作データの自動収集 (sar)

システム動作データを自動的に収集するには、sadcsa1sa2 という 3 つのコマンドを使用します。

sadc データ収集ユーティリティは、システム動作に関するデータを定期的に収集し、24 時間ごとに 1 つのファイルに 2 進形式で保存します。sadc を定期的に (通常は 1 時間ごとに) 実行するだけでなく、システムがマルチユーザーモードでブートするときにも実行するように設定できます。データファイルは、ディレクトリ /usr/adm/sa に格納されます。各ファイルには sadd という名前が与えられます。この場合、dd は現在の日付です。このコマンドの書式は次のとおりです。


/usr/lib/sa/sadc [t n] [ofile]

このコマンドは、t 秒 (t は 5 秒より長くする必要があります) 間隔でサンプルデータを n 回収集します。次に、ファイル ofile または標準出力に 2 進形式で書き込みます。tn を省略すると、特殊ファイルに 1 度だけ書き込まれます。

ブート時に sadc を実行する

カウンタが 0 にリセットされるときから統計情報を記録するために、sadc コマンドをシステムのブート時に実行する必要があります。sadc をブート時に確実に実行するには、日ごとのデータファイルにレコードを書き込むコマンド行を /etc/init.d/perf ファイルに入れなければなりません。

コマンドエントリの書式は次のとおりです。


su sys -c "/usr/lib/sa/sadc /usr/adm/sa/sa`date +5d`"

sa1 を使用して sadc を定期的に実行する

定期的にレコードを生成するには、sadc を定期的に実行する必要があります。そのためには、シェルスクリプト sa1 を呼び出す 1 行を /var/spool/cron/sys ファイルに挿入するのが最も簡単な方法です。このスクリプトは sadc を起動し、日ごとのデータファイル /var/adm/sa/sadd に書き込みます。書式は次のとおりです。


/usr/lib/sa/sa1 [t n]

引数 tn を指定すると、レコードは t 秒間隔で n 回書き込まれます。この 2 つの引数を省略すると、レコードは 1 度しか書き込まれません。

sa2 を使用してレポートを生成する

もう 1 つのシェルスクリプト sa2 は、2 進データファイルではなくレポートを生成します。sa2 コマンドは sar コマンドを呼び出して、レポートファイルに ASCII 出力を書き込みます。

システム動作データを収集する (sar)

sar コマンドを使用すると、システム動作データそのものを収集するか、sadc で作成された日ごとの動作ファイルに収集された情報をレポートできます。

sar コマンドの書式は次のとおりです。


sar [-aAbcdgkmpqruvwy] [-o file] t [n] 

sar [-aAbcdgkmpqruvwy] [-s time] [-e time] [-i sec] [-f file]

次の sar コマンドは、オペレーティングシステム内の累積動作カウンタから t 秒間隔で n 回データを収集します (t が 5 秒ないし 5 秒以上の値でないと、コマンドそのものがサンプルに影響を与えることがあります)。サンプルの収集間隔を指定しなければなりません。指定しないと、このコマンドは第 2 の書式に従って動作します。n のデフォルト値は 1 です。次の例では、10 秒間隔で 2 つのサンプルが収集されます。-o オプションを指定すると、サンプルは 2 進形式でファイルに保存されます。


$ sar -u 10 2

その他に、sar では次の点に注意する必要があります。

表 36-21sar コマンドのオプションとその動作を示します。

表 36-21 sar コマンドのオプション

オプション 

動作 

-a

ファイルアクセス操作をチェックする 

-b

バッファー動作をチェックする 

-c

システムコールをチェックする 

-d

各ブロックデバイスの動作をチェックする 

-g

ページアウトとメモリーの解放をチェックする 

-k

カーネルメモリーの割り当てをチェックする 

-m

プロセス間通信をチェックする 

-p

スワップとディスパッチ動作をチェックする 

-p

待ち行列動作をチェックする 

-r

未使用メモリーをチェックする 

-u

CPU の使用率をチェックする 

-nv

システムテーブルの状態をチェックする 

-w

ボリュームのスワッピングと切り替えをチェックする 

-y

端末動作をチェックする 

-A

システム全体の性能をリポートする (すべてのオプションを入力した場合と同じです) 

オプションを使用しなければ、-u オプションを指定してコマンドを呼び出すのと同じです。

自動データ収集を設定する方法

  1. スーパーユーザーになります。

  2. /etc/init.d/perf ファイルを編集してすべての行のコメント指定を解除します。

    このバージョンの sadc コマンドは、カウンタが 0 にリセットされる時間 (ブート時) を示す特殊なレコードを書き込みます。sadc の出力はファイル sadd に格納されます (この場合、dd は現在の日付です)。このファイルは、毎日のシステム動作の記録となります。

  3. /var/spool/cron/crontabs/sys ファイル (システムの crontab ファイル) を編集します。次の行をコメント解除します。


    # 0 * * * 0-6 /usr/lib/sa/sa1
    # 20,40 8-17 * * 1-5 /usr/lib/sa/sa1
    # 5 18 * * 1-5 /usr/lib/sa/sa2 -s 8:00 -e 18:01 -i 1200 -A

    第 1 のエントリは、時間に関するレコードを、1 週 7 日間の 1 時間ごとに /var/adm/sa/sadd に書き込みます。

    第 2 のエントリは、月曜から金曜の午前 8 時から午後 5 時までのピーク作業時間中に、各正時から 20 分過ぎと 40 分過ぎの 2 度に渡り、レコードを /var/adm/sa/sadd に書き込みます。

    したがって、この 2 つの crontab エントリによって、月曜から金曜までは午前 8 時から午後 5 時まで 20 分ごとに、それ以外の曜日は 1 時間ごとに、レコードが /var/adm/sa/sadd に書き込まれます。これらのデフォルトは、必要に応じて変更できます。