Linuxにおける性能と監視系コマンドまとめ
性能とは?
「レスポンスタイム」と「スループット」。なんとたったこれだけ。
じゃあ性能って何で決まるの?→システムリソース(後述)です。
システムリソースのどれかがネックになってレスポンスが遅かったり、いっぱい処理してくれなかったりする。
4大システムリソース
- CPU
- CPU使用率(%)
- CPU実行待ちプロセス数(個)
- 等
- メモリ
- 物理メモリ使用量(MB)
- スワップ発生状況(KB/s)
- 等
- ディスク
- ディスクビジー率(%)
- ディスク実行待ちトランザクション数(個)
- 等
- ネットワーク
- トラフィック量(KB/s)
- 等
じゃあどうやって取得するの?っていうのは以降で。
コマンド
- sar
- (System Admin Reporter)CPUやネットワーク、メモリ、ディスクなどのシステム情報を確認・出力できるコマンド
- 「sar -A -o sysinfo.sar 1 10」で情報を取得
- 1秒おき計10回、sarで取得できる全ての情報をsysinfo.sarファイルにバイナリで出力する
- このコマンドは情報をバイナリでファイルへ取得するのみで閲覧はできない
- 以降のコマンドを使用することでテキストで閲覧可能となる
- 【4大システムリソース:CPU】 「sar -u -f sysinfo.sar」でCPU利用状況を取得
10時44分25秒 CPU %user %nice %system %iowait %steal %idle 10時44分26秒 all 0.00 0.00 0.00 0.19 0.00 99.81 10時44分27秒 all 0.06 0.00 0.00 0.06 0.00 99.88 10時44分28秒 all 0.00 0.00 0.00 0.12 0.00 99.88 10時44分29秒 all 0.06 0.00 0.00 0.12 0.00 99.81 10時44分30秒 all 0.00 0.00 0.00 0.06 0.00 99.94 10時44分31秒 all 0.06 0.00 0.12 0.19 0.00 99.63
-
-
- 「CPU」:CPU番号。「-u」だとallだけ取れるが「-P
」で指定のCPUだけとれる。「-P ALL」だとallと全CPUがとれる。 - 「%user」:ユーザ・モード状態であった割合。
- 「%nice」:優先度が通常より低いユーザ・モード状態での使用割合。
- 「%system」:システム・モード状態であった割合。
- 「%iowait」:CPUが ディスクI/Oの待機によりアイドル状態であった割合。
- 「%steal」:ゲストOSがリソース要求を行ったにもかかわらずCPUリソースを割り当ててもらえなかった時間の割合。仮想マシンでも立ち上げない限り0。
- 「%idle」:その他の場合のアイドル状態であった割合。
- 「CPU」:CPU番号。「-u」だとallだけ取れるが「-P
- 【4大システムリソース:メモリ】 「sar -r -f sysinfo.sar」でメモリ・スワップ利用状況を取得
-
11時07分10秒 kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad 11時07分11秒 37410832 61424032 62.15 141260 47788824 4192712 244 0.01 0 11時07分12秒 37410832 61424032 62.15 141268 47788816 4192712 244 0.01 0 11時07分13秒 37410956 61423908 62.15 141276 47788844 4192712 244 0.01 0 11時07分14秒 37410840 61424024 62.15 141284 47788836 4192712 244 0.01 0 11時07分15秒 37410708 61424156 62.15 141292 47788864 4192712 244 0.01 0 11時07分16秒 37410684 61424180 62.15 141300 47788856 4192712 244 0.01 0
-
- 【4大システムリソース:ディスク】 「sar -b -f sysinfo.sar」でディスク利用状況を取得
10時44分25秒 tps rtps wtps bread/s bwrtn/s 10時44分26秒 108.91 0.00 108.91 0.00 2138.61 10時44分27秒 6.00 0.00 6.00 0.00 128.00 10時44分28秒 6.00 0.00 6.00 0.00 128.00 10時44分29秒 6.00 0.00 6.00 0.00 144.00 10時44分30秒 6.00 0.00 6.00 0.00 128.00 10時44分31秒 12.00 2.00 10.00 16.00 144.00
-
-
- 「tps」:1秒間あたりのデバイスに対するI/O数。
- 「rtps」:1秒間あたりのデバイスに対する読込み要求数。
- 「wtps」:1秒間あたりのデバイスに対する書込み要求数。
- 「bread/s」:1秒間あたりのデバイスからの読込みブロック数。ブロックサイズは512バイト。
- 「bwrtn/s」:1秒間あたりのデバイスに対する書込みブロック数。
- 【4大システムリソース:ディスク】 「sar -d -f sysinfo.sar」で論理デバイス毎の利用状況を取得
-
11時07分32秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 11時07分33秒 dev104-0 3.00 0.00 72.00 24.00 0.02 7.00 7.00 2.10 11時07分33秒 dev104-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11時07分33秒 dev104-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11時07分33秒 dev104-3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11時07分33秒 dev104-4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11時07分33秒 dev104-5 3.00 0.00 72.00 24.00 0.02 7.00 7.00 2.10
-
-
- 「DEV」:論理デバイス名。
- 「tps」:1秒間あたりのデバイスに対するI/O数。
- 「rd_sec/s」:1秒間あたりのデバイスからの読込みセクタ数。 1セクタは512バイト。
- 「wr_sec/s」:1秒間あたりのデバイスに対する書込みセクタ数。 1セクタは512バイト。
- 「sect/s」:1秒間あたりのデバイスに対するI/Oセクタ数。 1セクタは512バイト。
- 「avgrq-sz」 : デバイスへのIOリクエストの平均セクタサイズ。
- 「avgqu-sz」 : デバイスへのIOリクエストの待ち行列の平均セクタサイズ。
- 「await」 : デバイスへのIOリクエストの平均待ち時間(msec)。待ち行列にいる時間+処理時間。
- 「svctm」 : デバイスへのIOリクエストの平均処理時間(msec)。
- 「%util」 : デバイスへのIOリクエスト中のCPU使用率。
- 【4大システムリソース:ネットワーク】 「sar -n DEV -f sysinfo.sar」で送受信パケットの統計情報を取得
-
11時07分32秒 IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s 11時07分33秒 lo 8.00 8.00 20032.00 20032.00 0.00 0.00 0.00 11時07分33秒 eth0 9.00 4.00 816.00 472.00 0.00 0.00 1.00 11時07分33秒 eth1 12.00 12.00 1089.00 1062.00 0.00 0.00 0.00 11時07分33秒 eth2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11時07分33秒 eth3 0.00 0.00 0.00 0.00 0.00 0.00 0.00
-
-
- 「IFACE」:インタフェース名。
- 「rxpck/s」:1秒間あたりの受信パケット数。
- 「txpck/s」:1秒間あたりの送信パケット数。
- 「rxbyt/s」:1秒間あたりの受信バイト数。
- 「txbyt/s」:1秒間あたりの送信バイト数。
- 「rxcmp/s」:1秒間あたりの圧縮受信パケット数。
- 「txcmp/s」:1秒間あたりの圧縮送信パケット数。
- 「rxmcst/s」:1秒間あたりのマルチキャスト受信パケット数。
- 「sar -B -f sysinfo.sar」でページング統計情報を取得
- その他sarコマンド
- 「sar -c -f sysinfo.sar」でプロセス生成状況を取得
- 「sar -W -f sysinfo.sar」でスワップイン・アウトの統計情報を取得
- 「sar -n EDEV -f sysinfo.sar」でネットワークエラーの統計情報を取得
- 「sar -n SOCK -f sysinfo.sar」でソケットに関する統計情報を取得
- ★CSV形式でデータを取得する方法
-
10時44分25秒,CPU,%user,%nice,%system,%iowait,%steal,%idle 10時44分26秒,all,0.00,0.00,0.00,0.19,0.00,99.81 10時44分27秒,all,0.06,0.00,0.00,0.06,0.00,99.88 10時44分28秒,all,0.00,0.00,0.00,0.12,0.00,99.88 10時44分29秒,all,0.06,0.00,0.00,0.12,0.00,99.81 10時44分30秒,all,0.00,0.00,0.00,0.06,0.00,99.94 10時44分31秒,all,0.06,0.00,0.12,0.19,0.00,99.63
- mpstat
- CPUの利用状況を確認するコマンド
- vmstat
- CPUやメモリの負荷率や使用状況を確認するコマンド
- iostat
- ディスク I/Oの利用状況を確認するコマンド
- netstat
- strace
また、リソースの情報を記録しているファイルがある。
- /proc/cupinfo
- /proc/meminfo
「/proc/」配下にまだいろいろありそう。
ダンプを取得する。
実戦用メモ
以下のようなシェルを準備しておけば便利。
各HOSTへログインしてsarを仕込んで回る。
Jenkinsとか使えばなお便利かも。(あらかじめsshでパスワードを聞かれないように設定する必要あり)
#!/bin/sh HOSTS="host0001 host0002 host0003" USER="user0001" DIRNAME="$1" for HOST in ${HOSTS} do echo "sarを実行します" ssh ${USER}@${HOST} mkdir /tmp/$1 sleep 2 done for HOST in ${HOSTS} do ssh ${USER}@${HOST} nohup sar -A -o /tmp/$1/`hostname -s`_`date "+%Y%m%d"`.sar 1 43200 >/dev/null & done exit 0
また、sarをグラフ化してくれるツール(Ksar)がある。
http://d.hatena.ne.jp/GARAPON/20090323/1237772247