ぺーぺーSEのブログ

備忘録・メモ用サイト。

Linuxにおける性能と監視系コマンドまとめ

性能とは?

「レスポンスタイム」と「スループット」。なんとたったこれだけ。
じゃあ性能って何で決まるの?→システムリソース(後述)です。
システムリソースのどれかがネックになってレスポンスが遅かったり、いっぱい処理してくれなかったりする。

  • レスポンスタイム
    • 処理の要求から結果(の先頭)が返ってくるまでの時間(s、ms)
    • TAT(Turn Around Time)ってのがあって、これは「処理の要求から結果の全てが返ってくるまでの時間」。
      • 画面があれば、描画が全て終わるまで。
  • スループット

4大システムリソース

じゃあどうやって取得するの?っていうのは以降で。

コマンド

  • 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」:その他の場合のアイドル状態であった割合。
    • 【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
      • 「kbmemfree」:空きメモリサイズ(KB)。
      • 「kbmemused」:物理メモリ使用サイズ(KB)。ただし、カーネル使用分は除く。
      • 「%memused」:メモリ使用率。
      • 「kbbuffers」:カーネルがバッファとして使用しているメモリサイズ(KB)。
      • 「kbcached」:キャッシュとして使用されているメモリサイズ(KB)。
      • 「kbswpfree」:空きスワップ領域サイズ(KB)。
      • 「kbswpused」:スワップ領域使用サイズ(KB)。
      • 「%swpused」:スワップ領域の使用量。
      • 「kbswpcad」:スワップ領域使用サイズ(KB)。
    • 【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形式でデータを取得する方法
      • 上記で紹介した取得データをtrコマンドを使用してスペースをカンマに置換するだけ
      • 「sar -u -f sysinfo.sar | tr -s " " ","」
      • これを「sar -u -f sysinfo.sar | tr -s " " "," > sysinfo.csv」のようにリダイレクトしてExcelでグラフ化すれば一目瞭然!
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/」配下にまだいろいろありそう。

ダンプを取得する。

  • tcpdump
    • ネットワーク上に流れるパケットのダンプを取得するコマンド
    • 例1)tcpdump -i eth0 tcp port 8080 -w /tmp/tcpdump.pcap
      • ネットワークカードeth0上に流れるパケットのダンプを/tmp/tcpdump.pcapファイルに取得する(バイナリで出力されるが。。。)
    • 例2)tcpdump -i eth0 tcp port 8080 -X > ./tcpdump.pcap
      • 「-X」をつけると16進数で出力される。標準出力はなぜかバイナリになっていない。

実戦用メモ

以下のようなシェルを準備しておけば便利。
各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