「何とかstat」というコマンドがたくさんあります。よく使うものの基本的な使用方法をまとめます。
iostat (I/Oデバイスの統計情報)
システムが認識する各デバイスのI/Oの使用状況を調査するコマンドです。補足情報としてCPUの使用状況「%user, %system, %iowait, %idle」も合わせて出力されます。
5秒毎に表示
$ iostat 5
5秒毎に10回表示
$ iostat 5 10
通常は "-x" (extended) オプションを付与して、出力内容を詳細なものにしたほうがよいです。
$ iostat -x 5 10
r/s
"read request per second" の意味で、一秒間あたりの読み込みリクエスト数です。
w/s
"write request per second" の意味で、一秒間あたりの書き込みリクエスト数です。
avgrq-sz
"average request size" の意味で、読み書きリクエストあたりの平均セクタ数です。セクタは記憶装置がデータを記録する際の最小単位で、512バイトだったり2048バイトだったりします。
avgqu-sz
"average queue size" の意味で、処理待ち状態にある読み書きリクエストの平均個数です。
await
"average wait" の意味で、「待ちおよび処理」にかかった時間の平均値です。単位はミリセカンド。
%util
"utilization" の意味で、I/OデバイスがCPUによって使用されていた時間の割合です。
EBS などをマウントしていると Device が複数表示されます。
$ iostat -x
Linux 3.14.35-28.38.amzn1.x86_64 (yourhostname) 2015年05月26日 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.24 0.00 0.03 0.01 0.02 99.69
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
xvda 0.00 0.33 0.03 0.42 0.97 7.04 18.00 0.00 0.63 0.30 0.01
xvdf 0.00 0.05 0.00 0.00 0.00 0.78 216.17 0.00 93.69 1.81 0.00
%util はデバイス毎に考える概念です。例えば /data にマウントした xvdf の disk utilization が限界の 100% に仮になったとしても OS が使用する root ボリューム xvda とは関係がないため OS に迷惑がかかることはありません。CPU の iowait が高いことが判明したら、具体的にどのデバイスの %util が高くなっているのかを調査するようにしましょう。
vmstat (仮想メモリの統計情報)
"virtual memory statics" の意味で、仮想メモリの使用状況を調査するコマンドです。補足情報として「プロセス、I/O、CPUなど」の情報も出力されます。
1秒間隔で10回表示
$ vmstat 1 10
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 324200 39216 69748 0 0 1 1 9 12 0 0 100 0 0
...
procs
- r: "The number of processes waiting for run time" の意味で、実行待ちプロセスの個数です。PCのCPUコア数と比較して大きくなると問題です
swap
物理的なメモリの容量が不足してくると、OSはスワップという機能を用いてハードディスク上に仮想メモリ領域 (スワップ領域) を確保します。参照される頻度が高くなれば物理メモリに読み出し (スワップイン) たり、あまり参照されない物理メモリ上のデータをスワップ領域に書き出し (スワップアウト) たりします。
- si: "swap in" の意味で、一秒間あたりにスワップインされたメモリの容量です。単位は環境に依存します
- so: "swap out" の意味で、一秒間あたりにスワップアウトされたメモリの容量です。単位は環境に依存します
memory
- swpd: スワップ領域のサイズ。物理的なメモリが不足してくると大きくなります
- free: 全く使用されておらずIDLE状態にあるメモリのサイズ
- buff: バッファとして確保されたメモリのサイズ。OSが様々な処理をする際の緩衝領域として多目的に有効活用されます
- cache: キャッシュとして確保されたメモリのサイズ。OSが様々な処理をする際の一時記憶領域として多目的に有効活用されます。例えば、キャッシュしておくことでディスクアクセスの回数を減らしたりします
io
- bi: "blocks + in" の意味で、一秒間あたりにI/Oデバイスから読み出したブロック数です
- bo: "blocks + out" の意味で、一秒間あたりにI/Oデバイスに書き込んだブロック数です
system
- cs: "context switch" の意味で、一秒間あたりに発生したコンテキストスイッチの回数です。
cpu
- us: "user" の意味。ユーザプロセスのCPU使用率
- sy: "system" の意味。システムプロセスのCPU使用率
- id: "idle" の意味。CPUが使用されていない時間の割合
- wa: "wait" の意味。I/O待ちに使用した時間の割合
pidstat (プロセスの統計情報)
以下のコマンドが基本です。詳しくは "man pidstat" を参照してください。
CPU使用状況を表示
$ pidstat
I/Oデバイス使用状況を表示
$ pidstat -d
1秒間隔で10回、PIDを指定して表示
$ pidstat -d -p 1091 1 10
dstat (多機能な統計情報レポートツール)
iostat, vmstatなどを統合したようなPython製のコマンドです。他のstatファミリーと異なり、dstatはsysstatパッケージに含まれていません。例えば以下のようにしてインストールする必要があります。
$ yum install dstat
一時間分を1秒毎にCSVファイルに出力
$ dstat --output file.csv 1 3600
各種オプション
基本は以下のオプションの組み合わせです。プラグインを導入すると例えばmysqlの統計情報も取得できます。詳細は "man dstat" を参照してみてください。
時刻情報
"-t" で現在時刻、"-T" でUNIX時間を出力します。
$ dstat -tT
----system---- --epoch---
date/time | epoch
26-10 22:06:54|1414328815
CPU
$ dstat -c
----total-cpu-usage----
usr sys idl wai hiq siq
0 0 100 0 0 0
ディスクI/O
$ dstat -d
-dsk/total-
read writ
1628B 909B
ページング (スワップ)
dstat -g
---paging--
in out
0 0
ロードアベレージ
$ dstat -l
---load-avg---
1m 5m 15m
0 0 0
メモリ
$ dstat -m
------memory-usage-----
used buff cach free
79.9M 41.6M 188M 190M
ネットワーク
$ dstat -n
-net/total-
recv send
60B 202B
I/Oリクエスト数
$ dstat -r
--io/total-
read writ
0.08 0.14
コンテキストスイッチ
$ dstat -y
---system--
int csw
10 12
topコマンド関連
他のユーザのプロセス情報を参照するため、権限が不足している場合は "sudo" を付与して実行するとよいです。
- --top-cpu: CPUを最も使用しているプロセス情報を表示
- --top-bio: I/Oとのブロックのやり取り個数が最も多いプロセス情報を表示
- --top-io: I/Oへのリクエスト回数が最も多いプロセス情報を表示
netstat (ネットワークの状態を表示)
ルーティングテーブル
以下のようにすることでルーティングテーブルを表示できます。/sbin/ip route で代用することが推奨されています。
$ netstat -r
ソケットの使用状況
以下のようにすることでソケットの使用状況を表示できます。オプション "-p" でプロセス情報を閲覧する権限が必要になるため sudo を付与しておくとよいです。macOS の場合などは lsof が便利です。
$ sudo netstat -atup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:mysql *:* LISTEN 1092/mysqld
tcp 0 0 *:ssh *:* LISTEN 954/sshd
tcp 0 0 localhost:smtp *:* LISTEN 1184/master
tcp 0 52 192.168.56.10:ssh 192.168.56.1:52138 ESTABLISHED 1238/sshd
tcp 0 0 *:http *:* LISTEN 1194/httpd
tcp 0 0 *:ssh *:* LISTEN 954/sshd
tcp 0 0 localhost:smtp *:* LISTEN 1184/master
udp 0 0 *:bootpc *:* 785/dhclient
オプションの意味
- -a: すべてのソケットを表示。例えば状態が "ESTABLISHED" だけでなく "LISTEN" のものも表示される
- -tu: TCPまたはUDPのソケットのみを表示
- -p: ソケットを使用しているプログラムの情報を表示 (システムプロセスの情報を表示するためにはroot権限が必要)
- -n: 文字列ではなく数値で表示 (例えば *:mysql ではなく 0.0.0.0:3306 となります)
- -l: LISTEN しているソケットのみ表示 (便利な組み合わせ: -ltn)
サーバ接続がうまくいかない場合、ポートが本当に開いているかをサーバ側で調査する際に
$ sudo netstat -lptn
は有用です。ちなみに、クライアント側で調査するためには
$ telnet 192.168.33.101 3306
などとします。通常 3306 は mysqld のポートです。
表示結果の意味
- Proto: プロトコル
- Recv-Q: ユーザプログラムによって読み出されていないデータ容量 (byte)
- Send-Q: リモートホストによってAckが返されていないデータ容量 (byte)
- Local Address: ソケットのIPアドレスとポート番号
- Foreign Address: リモート側のソケットのIPアドレスとポート番号
- State: TCPにおける状態 (UDPには状態という概念がないため空欄)
- PID/Program name: ソケットを使用しているプログラムのPIDと名前
"man netstat" によると将来的には ss というコマンドに置き換えられていく予定とのことです。
netstat: This program is obsolete. Replacement for netstat is ss.
関連記事
- 使い所が難しいマイナーな運用コマンドコマンドのエイリアスを登録する (update-alternatives) mybin という名前のコマンドを登録 sudo update-alternatives --install /usr/local/bin/mybin mybin /usr/bin/echo 10 sudo update-alternatives --install /usr/local/bin/mybin mybin /...
- ipコマンドの基本的な使い方ネットワーク関連のコマンドはたくさんあります。しかしながら、その一部は ip コマンドに集約できます。 基本形 ("man ip" より抜粋) $ ip OBJECT COMMAND OBJECT: link, neigh, addr, route (等) COMMAND: show, add, delete (等) データリンク層のネットワークデバイス情報 (ifconfigコマンドの代用) M...
- プロセス関連のコマンドプロセスID関連 (ps, pgrep, pkill) 全プロセスを表示するためには $ ps ax とすればよく、その表示を見やすくするためには "u" と "w" を追加して $ ps auxw とすればよいです。表示件数自体は同じです。そのうち特定のコマンドのプロセスIDだけを表示したい場合は $ ps ax | grep 'my_script' | grep -v grep | awk '...
- rpmとyumのチートシートrpm (RedHat Package Manager または RPM Package Manager) はRedHat系のパッケージ管理ツールで、yum (Yellowdog Updater Modified) は内部的にrpmを実行するメタパッケージ管理ツールです。rpmには柔軟性がありyumには利便性があります。 rpmは "rpmパッケージファイル" があれば何でもインストールできますが、...
- メモリおよびディスクリソースを調査するために便利なコマンドおよび周辺知識メモリ使用量を表示 (free) 既定ではキロバイト単位で表示されます。オプション "-b", "-k", "-m", "-g" を付与して実行するとそれぞれバイト、キロ、メガ、ギガで表示されます。 $ free total used free shared buffers cached Mem: 510824 ...