数年前に書いたエントリーをちょっとアップデートしておこう、ということで。
サーバの稼働状況を把握するためのツールとしては、mrtg とか、 munin とか使えば、グラフィカルに状態がわかるんだけど、状況によっては「その時、どういう状態だったのかの数値が欲しい」ということや、検証だけのために munin のセットアップする手間までかけられない、という場合もあったりするので、そういうときは sysstat いうパッケージをインストールして使うという手があったりします。
Linuxであれば"sar"というコマンドを使えば、比較的簡単にCPU利用率やLoadAverageのデータを取得できるので、それを使うのがいいと思うし、自分でもそれを使ってデータ取りしていることがほとんど。
[From Webサーバのパフォーマンスを測る : sar - Soukaku's HENA-CHOKO Blog]
sysstat 自体はパッケージ名で、インストールするによって、いくつかのコマンドとシステムの稼働情報を一定間隔で取得するための設定類などがインストールされます。
インストール自体は、非常に簡単。
Debian だったら
aptitude install sysstat
CentOSでも
yum install sysstat
でインストールは完了します。
以下の細かい説明は、Debian GNU/Linux の unstable 上でのお話。他のディストリビューションとの違いがある場合は、適宜読み替えを…。
/usr/bin/sar
リアルタイムで特定のリソースの状態を見たり、過去に取得した稼働状況データを参照したりするコマンドで、sysstat パッケージでは最も使うと思われるコマンドです。
-h
オプションを付けて実行してみると、主要オプションの意味が表示されます。もっと細かいのは、 "man sar
" で確認してください。
nexus01:~# sar -h
使い方: sar [ オプション ] [ <間隔> [ <回数> ] ]
主要なオプションとその結果:
-B ページングの状態
-b I/O と転送率の状況
-d Block devices statistics
-F Filesystems statistics
-H Hugepage の利用状況
-I { <int> | SUM | ALL | XALL }
割り込み状況
-m { <キーワード> [,...] | ALL }
電源管理状態の
キーワード:
CPU CPU 周波数
FAN ファン回転数
FREQ CPU の平均周波数
IN 入力電圧
TEMP デバイス温度
USB システムに挿入されている USB デバイス
-n { <キーワード> [,...] | ALL }
ネットワークの状態
キーワード一覧:
DEV ネットワークインターフェイス
EDEV ネットワークインターフェイス (エラー)
NFS NFS クライアント
NFSD NFS サーバ
SOCK ソケット (v4)
IP IP トラフィック (v4)
EIP IP トラフィック (v4) (エラー)
ICMP ICMP トラフィック (v4)
EICMP ICMP トラフィック (v4) (エラー)
TCP TCP トラフィック (v4)
ETCP TCP トラフィック (v4) (エラー)
UDP UDP トラフィック (v4)
SOCK6 Sockets (v6)
IP6 IP トラフィック (v6)
EIP6 IP トラフィック (v6) (エラー)
ICMP6 ICMP トラフィック (v6)
EICMP6 ICMP トラフィック (v6) (エラー)
UDP6 UDP トラフィック (v6)
-q Qキューの長さとロードアベレージの状態
-R メモリの状況
-r メモリ利用率の状態
-S スワップ領域の利用状況
-u [ ALL ]
CPU 利用の利用状況
-v Kernel tables statistics
-W スワップの状態
-w タスクの作成とシステムスイッチの状態
-y TTY devices statistics
引数なしで実行すると、当日の取得済みの稼働情報データの中から、全てのCPU利用率を表示します。(-u
オプション付けて実行したのと同じ。)
nexus01:~# sar
Linux 3.12-1-amd64 (nexus01) 2014年04月06日 _x86_64_ (4 CPU)
00時00分01秒 CPU %user %nice %system %iowait %steal %idle
00時05分01秒 all 2.11 51.87 1.66 7.60 0.00 36.76
00時15分01秒 all 1.92 50.78 1.13 2.05 0.00 44.13
00時25分01秒 all 2.16 50.83 1.09 1.61 0.00 44.31
00時35分01秒 all 2.10 51.06 1.17 1.95 0.00 43.72
平均値: all 2.07 51.03 1.20 2.69 0.00 43.01
過去の特定日( 4/2 )の特定時間帯( 7 〜 8 時 )の loadave の推移を見たい場合は、
nexus01:~# sar -q -f /var/log/sysstat/sa02 -s 07:00:00 -e 08:00:00
Linux 3.12-1-amd64 (nexus01) 2014年04月02日 _x86_64_ (4 CPU)
07時05分01秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
07時15分01秒 9 462 4.47 4.94 6.31 0
07時25分01秒 8 465 4.42 4.73 5.57 1
07時35分01秒 10 468 4.61 4.80 5.25 0
07時45分01秒 4 470 4.62 5.71 5.70 4
07時55分01秒 8 476 4.30 4.83 5.28 0
平均値: 8 468 4.48 5.00 5.62 1
というように、オプションを付けて実行します。
オプションは以下のとおり。
-q
:Qキューの長さとロードアベレージの状態
-f
:データの格納されているファイルを指定("/var/log/sysstat/sa[0-9]{2}
" に、1日分毎の情報が保存されている。省略すると当日のものを表示)
-s
:開始時刻
-e
:終了時刻
よく見ると、結果の方が毎時 5 分台で 10 分おきの表示になっていますが、これは "/var/log/sysstat/sa[0-9]{2}
" に格納するデータの取得間隔が、”/etc/cron.d/sysstat
” で指定されているため。
ここの "5-55/10
" の部分を "*/5
" と書き換えれば、5 分おきの取得に変更する、といったことも出来ます。個人的な経験からいけば、特にトラブルが発生していないけど定常的にデータだけは取得しておきたい、という用途なら、最短で 5 分おきで取得したデータが有れば十分かなぁ、というところでしょうか。
nexus01:~# more /etc/cron.d/sysstat
# The first element of the path is a directory where the debian-sa1
# script is located
# Activity reports every 10 minutes everyday
5-55/10 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1
# Additional run at 23:59 to rotate the statistics file
59 23 * * * root command -v debian-sa1 > /dev/null && debian-sa1 60 2
/usr/lib/sysstat/sadc
こちらは、データだけを取得するためのコマンドで、一時的にデータを取りたい、といった場合はこちらのほうが使いやすいでしょう。sadc
で取得したデータを sar
で見る、という流れ。
こちらも -h
オプション付きで実行すると、使えるオプションが表示されます。(詳細は勿論、 "man sadc
" )
nexus01:~# /usr/lib/sysstat/sadc -h
使い方: /usr/lib/sysstat/sadc [ オプション ] [ <間隔> [ <回数> ] ] [ <出力ファイル> ]
利用可能なオプション:[ -C <コメント> ] [ -F ] [ -L ] [ -V ]
[ -S { INT | DISK | IPV6 | POWER | SNMP | XDISK | ALL | XALL } ]
実際に使ってみると、こんな感じ。
実行例は "-S IPV6
" を付けて、5 秒間隔で 5 回取得し、結果を "test-IPV6.dat
" に格納。見るときは、 "sar
" 実行時に -n
オプションで "IP6
" と -f
オプションでデータを格納している "test-IPV6.dat
" を指定する、という流れ。
nexus01:~# /usr/lib/sysstat/sadc -S IPV6 5 5 test-IPV6.dat
nexus01:~# sar -n IP6 -f test-IPV6.dat
Linux 3.12-1-amd64 (nexus01) 2014年04月06日 _x86_64_ (4 CPU)
17時31分51秒 irec6/s fwddgm6/s idel6/s orq6/s asmrq6/s asmok6/s imcpck6/s omcpck6/s fragok6/s fragcr6/s
17時31分56秒 4.40 0.00 4.40 4.20 0.00 0.00 0.00 0.00 0.00 0.00
17時32分01秒 4.40 0.00 4.40 4.00 0.00 0.00 0.00 0.00 0.00 0.00
17時32分06秒 13.00 0.40 12.60 14.80 0.00 0.00 0.00 0.00 0.00 0.00
17時32分11秒 4.60 0.00 4.60 4.80 0.00 0.00 0.00 0.00 0.00 0.00
平均値: 6.60 0.10 6.50 6.95 0.00 0.00 0.00 0.00 0.00 0.00
実際に取れるデータは、指定した回数マイナス1になるので、回数指定でデータ取りしたいときは、注意しましょう。まぁ、パフォーマンス試験などでデータ取りたいときは、間隔だけを指定して回数無しでファイルにデータを格納するようにしたほうがよいでしょう。
あと -S
オプションで取れるデータの一部は、デフォルトの設定のままだと取得されておらず、 "/var/log/sysstat/sa[0-9]{2}
" を参照しても出てこないという状態になります。
nexus01:~# sar -n IP6
要求された動作情報はファイル /var/log/sysstat/sa06 内にはありません
なので、普段から全てのシステム稼働データを取得したければ、 ”/etc/sysstat/sysstat
” にある "SADC_OPTIONS=
" の内容を ”-S XALL
” に書き換えておくとよいでしょう。(これで、取得可能なデータは全部取れる。)
勿論、取得するデータの項目が増えるので、 /var/log/sysstat/
以下に保存されるファイルのサイズも大きくなります。
nexus01:~# more /etc/sysstat/sysstat
# sysstat configuration file. See sysstat(5) manual page.
# How long to keep log files (in days).
# Used by sa2(8) script
# If value is greater than 28, then log files are kept in
# multiple directories, one for each month.
# Compress (using gzip or bzip2) sa and sar files older than (in days):
# Parameters for the system activity data collector (see sadc(8) manual page)
# which are used for the generation of log files.
# By default contains the `-S DISK' option responsible for generating disk
# statisitcs. Use `-S XALL' to collect all available statistics.
iostat
とか pidstat
とか
sysstat パッケージをインストールすることで追加されるコマンドには、IO 周りの状態だけを出力する iostat
や CPU 関連の状態だけを出力する mpstat
、実行しているデーモン類の状態を出力する pidsatat
など、特定用途向けのものも含まれていますので、必要に応じてうまく使うと良いかと思います。
参考までに iostat
と pidsatat
の出力結果もあげておきますね。
nexus01:~# iostat -x
Linux 3.12-1-amd64 (nexus01) 2014年04月06日 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
3.47 87.67 1.43 1.54 0.00 5.90
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 4.13 12.15 21.55 28.09 694.77 988.45 67.82 0.68 13.66 10.54 16.06 4.79 23.80
sdb 0.09 1.20 11.34 5.23 114.21 257.83 44.88 0.08 4.82 2.74 9.31 3.13 5.18
sdc 0.02 0.00 0.02 0.00 0.15 0.00 14.15 0.00 11.00 10.22 55.69 6.23 0.01
sdd 0.13 0.00 0.06 0.01 1.22 0.08 37.24 0.00 7.45 3.48 56.64 3.19 0.02
nexus01:~# pidstat -lrt -C zabbix_agent
Linux 3.12-1-amd64 (nexus01) 2014年04月06日 _x86_64_ (4 CPU)
22時33分01秒 UID TGID TID minflt/s majflt/s VSZ RSS %MEM Command
22時33分01秒 0 20300 - 0.00 0.00 56676 492 0.01 /usr/sbin/zabbix_agentd
22時33分01秒 0 - 20300 0.00 0.00 56676 492 0.01 |__/usr/sbin/zabbix_agentd
22時33分01秒 0 20301 - 0.01 0.00 56676 680 0.01 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
22時33分01秒 0 - 20301 0.01 0.00 56676 680 0.01 |__/usr/sbin/zabbix_agentd: collector [idle 1 sec]
22時33分01秒 0 20302 - 0.06 0.00 56676 784 0.01 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
22時33分01秒 0 - 20302 0.06 0.00 56676 784 0.01 |__/usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
22時33分01秒 0 20303 - 0.07 0.00 56676 780 0.01 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
22時33分01秒 0 - 20303 0.07 0.00 56676 780 0.01 |__/usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
22時33分01秒 0 20304 - 0.07 0.00 56676 784 0.01 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
22時33分01秒 0 - 20304 0.07 0.00 56676 784 0.01 |__/usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
22時33分01秒 0 20305 - 0.00 0.00 61284 2928 0.05 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
22時33分01秒 0 - 20305 0.00 0.00 61284 2928 0.05 |__/usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
22時33分01秒 0 20306 - 0.00 0.00 61284 3656 0.06 /usr/sbin/zabbix_agentd: active checks #2 [idle 1 sec]
22時33分01秒 0 - 20306 0.00 0.00 61284 3656 0.06 |__/usr/sbin/zabbix_agentd: active checks #2 [idle 1 sec]
22時33分01秒 0 20307 - 0.00 0.00 61284 3584 0.06 /usr/sbin/zabbix_agentd: active checks #3 [idle 1 sec]
22時33分01秒 0 - 20307 0.00 0.00 61284 3584 0.06 |__/usr/sbin/zabbix_agentd: active checks #3 [idle 1 sec]
# pidstat
は、うまく使うと便利、かも…。
コメントする