Linuxで取得しておくべきOSの性能情報一覧を紹介します。
よくスローダウンした時にサーバ情報を確認しますが、それでは性能調査としては遅いです。
この記事で紹介した方法を予め設定して性能情報を取得おきましょう。
有事の際には取得しておいた性能情報を確認します。
※この記事はRed Hat Enterprise for Linuxを前提に記載しています。
OS全体
OS全体はvmstatを使用して全体を把握しましょう。
私のオススメは↓で、60秒おきに24時間OSの**統計情報を取得します。**
vmstat -nw -S M 60 1440
”-n”オプションは、ヘッダーを一度だけ取得します。
-nオプションを付けないとヘッダーが何回も出てしまいます。
後でエクセルファイル化する場合などに不便ですのでオプションを付けましょう。
”-w”オプションは、ヘッダーと値を揃えて見出しをきれいに表示してくれます。
”-S 単位”オプションは、出力時の単位を指定します。
”60”は60秒毎に出力、”1440”は1440回出力します。
個人的には”M”を指定することをオススメします。
↓がログになります。awkとの合わせ技で時間を出力します。
$ vmstat -nw -S m 60 1440 | awk '{print strftime("%F %T") $0}'
2017-10-12 18:36:59procs -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu--------
2017-10-12 18:36:59 r b swpd free buff cache si so bi bo in cs us sy id wa st
2017-10-12 18:36:59 1 0 0 322 1 3045 0 0 67 17 577 649 3 1 96 0 0
まず大きく全体を把握してCPUなのか?メモリなのか?ディスクI/Oなのか?トップダウンで確認していくのが定石です。
CPU
CPUはsarコマンドを使用しましょう。
私のオススメは↓で、60秒おきに24時間CPUの統計情報を取得します。
sar -P 60 1440
”-P”オプションは、CPUのコアごとに使用状況を出力します。
”60”は60秒毎に出力、”1440”は1440回出力します。
↓がログになります。
$ sar -P ALL 60 144
Linux 3.10.0-514.el7.x86_64 (rhel73-12201.local.com) 2017年10月12日 _x86_64_ (2 CPU)
18時47分07秒 CPU %user %nice %system %iowait %steal %idle
18時48分07秒 all 4.37 0.00 0.65 0.08 0.00 94.89
18時48分07秒 0 4.72 0.00 0.69 0.00 0.00 94.59
18時48分07秒 1 4.02 0.00 0.60 0.17 0.00 95.21
CPUはコアごとにしっかり押さえましょう。
メモリ
メモリはsarコマンドを使用しましょう。
私のオススメは↓で、60秒おきに24時間メモリの統計情報を取得します。
sar -r 60 1440
”-r”オプションは、メモリの使用状況を出力します。
”60”は60秒毎に出力、”1440”は1440回出力します。
↓がログになります。
$ sar -r 60 1440
Linux 3.10.0-514.el7.x86_64 (rhel73-12201.local.com) 2017年10月12日 _x86_64_ (2 CPU)
18時49分35秒 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
18時50分35秒 314260 3732596 92.23 1004 2899104 3822488 47.13 1287928 2233168 40
18時51分35秒 314260 3732596 92.23 1004 2899112 3822488 47.13 1287956 2233156 36
人によってはvmstatで取得する人がいますがsarをオススメします。
ディスクI/O
ディスクI/Oはiostatコマンドを使用しましょう。
私のオススメは↓で、60秒おきに24時間ディスクI/Oの統計情報を取得します。
iostat -xmd -p ALL 60 1440
”-x”オプションは、拡張ディスク統計情報を出力します。
”-m”オプションは、出力単位をMBで出力します。
”-d”オプションは、デバイスの使用率を出力します。
”-p ALL”オプションは、すべてのデバイスの情報を出力します。
”60”は60秒毎に出力、”1440”は1440回出力します。
↓がログになります。awkコマンドとの合わせ技がオススメです。
$ iostat -xmd -p ALL 60 1440 | awk '{print strftime("%F %T ") $0}'
2017-10-12 18:57:27 Linux 3.10.0-514.el7.x86_64 (rhel73-12201.local.com) 2017年10月12日 _x86_64_ (2 CPU)
2017-10-12 18:57:27
2017-10-12 18:57:27 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
2017-10-12 18:57:27 scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
2017-10-12 18:57:27 sda 0.00 0.10 1.54 3.71 0.12 0.03 57.22 0.01 1.92 2.88 1.52 1.06 0.56
2017-10-12 18:57:27 sda1 0.00 0.00 0.04 0.00 0.00 0.00 21.91 0.00 2.04 0.71 200.25 1.12 0.00
2017-10-12 18:57:27 sda2 0.00 0.10 1.49 2.21 0.11 0.03 80.75 0.01 1.91 2.95 1.21 0.76 0.28
2017-10-12 18:57:27 dm-0 0.00 0.00 1.47 3.68 0.11 0.03 57.80 0.01 2.00 3.00 1.61 1.07 0.55
2017-10-12 18:57:27 dm-1 0.00 0.00 0.01 0.00 0.00 0.00 16.69 0.00 8.55 8.55 0.00 8.41 0.01
2017-10-12 18:57:27 dm-2 0.00 0.00 0.01 0.02 0.00 0.00 44.40 0.00 2.91 0.70 4.40 1.10 0.00
Disk I/Oはsarコマンドでも取得できますが どの領域に出力したのかを確認するのはiostatがオススメです。
I/Oはどの領域に対してアクセスが集中しているか?が重要になります。
スワップ領域
スワップ領域はsarコマンドを使用しましょう。
私のオススメは↓で、60秒おきに24時間OS統計情報を取得します。
sar -W 60 1440
”-W”オプションは、スワップ領域の出力状況を出力します。
”60”は60秒毎に出力、”1440”は1440回出力します。
↓がログになります。
$ sar -W 60 1440
Linux 3.10.0-514.el7.x86_64 (rhel73-12201.local.com) 2017年10月12日 _x86_64_ (2 CPU)
18時42分29秒 pswpin/s pswpout/s
18時43分29秒 0.00 0.00
18時44分29秒 0.00 0.00
18時45分29秒 0.00 0.00
昨今のシステムではメモリ不足⇒Swap使用は考えにくいです。 スワップ領域は念の取得しておきましょう。
ネットワーク
ネットワークは正常時と異常時の2種類取得することをオススメします。 共にsarコマンドで取得します。
正常時
私のオススメは↓で、60秒おきに24時間各ネットワークカードの情報を取得します。
sar -n DEV 60 1440
”-n DEV”オプションは、各ネットワークカードの正常系の使用状況を出力します。
”60”は60秒毎に出力、
”1440”は1440回出力します。
↓がログになります。
$ sar -n DEV 60 1440
Linux 3.10.0-514.el7.x86_64 (rhel73-12201.local.com) 2017年10月12日 _x86_64_ (2 CPU)
19時11分56秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
19時12分56秒 enp0s3 0.05 0.00 0.00 0.00 0.00 0.00 0.00
19時12分56秒 enp0s8 0.00 0.00 0.00 0.00 0.00 0.00 0.00
19時12分56秒 enp0s9 0.00 0.00 0.00 0.00 0.00 0.00 0.00
19時12分56秒 lo 2.33 2.33 0.40 0.40 0.00 0.00 0.00
19時12分56秒 virbr0-nic 0.00 0.00 0.00 0.00 0.00 0.00 0.00
19時12分56秒 virbr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
19時12分56秒 enp0s10 0.10 0.00 0.01 0.00 0.00 0.00 0.02
異常時
私のオススメは↓で、60秒おきに24時間各ネットワークカードの情報を取得します。
sar -n EDEV 60 1440
”-n EDEV”オプションは、各ネットワークカードの異常系の使用状況を出力します。
”60”は60秒毎に出力、”1440”は1440回出力します。
↓がログになります。
Linux 3.10.0-514.el7.x86_64 (rhel73-12201.local.com) 2017年10月12日 _x86_64_ (2 CPU)
19時19分21秒 IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s
19時20分21秒 enp0s3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
19時20分21秒 enp0s8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
19時20分21秒 enp0s9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
19時20分21秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
19時20分21秒 virbr0-nic 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
19時20分21秒 virbr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
19時20分21秒 enp0s10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
まとめ
上で説明したOSの統計情報を取得しておきましょう。
普段の情報取得は60秒(1分)に1回情報を取得しておけば大丈夫ですが、
障害発生時には1秒間隔にして取得することでより詳細な調査が可能になります。
取得スクリプトはまたの機会に公開します。
追記:スクリプト化しました。
スクリプト化しましたので、↓の記事も参考にしてください。