vmstat

vmstat は、CPU・メモリ・I/Oの利用状況を調べるのに用いるコマンド。

実行例

$ vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0    864  45868  11164 1021700    0    0     8    36   66  144  4  1 95  0
 0  0    864  45372  11164 1022112    0    0     0     8  204  639  1  1 98  0
 0  0    864  45372  11164 1022340    0    0     0     0  198  605  2  0 98  0
 1  0    864  45372  11164 1022412    0    0     0     0  170  586  2  1 97  0
 0  0    864  45372  11164 1022380    0    0     0     0  185  594  1  0 99  0

パラメータの意味

1行目 2行目 説明
procs r CPU割り当て中、または、割り当て可能なプロセス数
b 割り込み禁止(I/O待ちなど)をしているプロセス数
memory swapd 使用している仮想メモリサイズ(KB)
free 空きメモリサイズ(KB)
buff バッファキャッシュ(ブロックデバイス)に割り当てられたメモリサイズ(KB)
cache ページキャッシュ(ファイル)に割り当てられたメモリサイズ(KB)
swap si スワップINメモリサイズ(KB/s)
so スワップOUTメモリサイズ(KB/s)
io bi ブロックデバイスに送られたブロック数(blocks/s)
bo ブロックデバイスから読み取ったブロック数(blocks/s)
system in 1秒あたりの割り込み回数
cs 1秒あたりのコンテキストスイッチ回数
cpu us ユーザのCPU利用率(%)
sy システムのCPU利用率(%)
id CPUのアイドル率(%)
wa I/O待ちCPU利用率(%)

注目すべき箇所

1.CPUの状況

procs/r の値がCPUの数より大きい場合、実行プロセスがCPU待ちをしているということになる。CPU がどの処理で多くリソースを割いているかは、cpu/us、cpu/sy、cpu/wa の値でわかる。

2.I/Oの状況

procs/b の値が大きい場合、I/O待ちをしているプロセスが多いと言える。(通常は 0)
io/bi, io/bo の値でHDDなどの読み書きの負荷状況がわかる。

3.メモリ/スワップの状況

swap/si, swap/so が発生していると実メモリが不足していることがわかる。実メモリが不足すると仮想メモリが利用されるが、仮想メモリは低速でパフォーマンスを極端に低下させる原因になる。

4.その他

system/cs は、動作中の処理がパフォーマンスが出ているかどうかの指標になる。例えば DBの稼働状況を確認したい時に参考にしている。いくつが適正な値かは一概に言えないが、異常な状態と平常な状態では明らかに違う。

Linux システムの調査でよく使うコマンド

Linux システムの調査やトラブルが発生した際の手がかりになる情報を得るためによく使うコマンドたち。

  • パフォーマンス関連
    • vmstat
    • top
  • プロセス状況
    • ps
  • ディスク利用状況
    • df
    • du
  • ネットワーク(設定)状況
  • ネットワーク(疎通)状況

netstat

netstat は、サーバ内のネットワーク状況を表示するコマンド。

オプション

よく利用するオプション

オプション 説明
-l サーバがlistenしているポートの情報を表示
-a 接続状況が connected 以外の情報も表示
-n FQDNプロトコルの名前解決を行わない
-p ポートやソケットを使用しているプログラム名も表示する
-u UDPの接続状況を表示
-t TCPの接続状況を表示

実行例

$ sudo LANG=C netstat -lanput
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      689/sshd        
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1246/cupsd      
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1187/exim4      
tcp        0      0 0.0.0.0:2401            0.0.0.0:*               LISTEN      1224/xinetd     

パラメータの意味

パラメータ 説明
Proto 使用しているプロトコル(tcp/udp/raw)
Recv-Q このソケットに接続されたユーザプログラムに渡されなかったデータのバイト数
Send-Q リモートホストに受け入れられなかったデータのバイト数
Local Address ローカル側ソケットのアドレスとポート番号
Foreign Address リモート側ソケットのアドレスとポート番号
State 現在の接続状態
PID/Program name 使用しているプログラムのPIDとプログラム名