SSブログ

続・vmstatの見方と考え方 [Linux(CentOS/VineLinux)]

vmstatの見方と考え方を見たという人から…

 vmstatの右端の、「cpu」のところにある「id」でサーバの重い・軽いを判断してはいけないという理由がイマイチわからないのでもう少し説明して欲しい

 というリクエストを受けたので、説明を追加する。

 まず、理由は複数あるのけども、その中で最も判りやすい例を示す。

 ターミナルを2個開いて、片方でvmstatを、もう片方でtopコマンドを実行してみよう。すると…
[root@nfsserver ~]# vmstat 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  1      4  78100 465408 11877040    0    0   170    23    0    2  0  1 97  2  0
 2  1      4  79332 465592 11876136    0    0  4108   211 5870 3475  1  3 83 13  0
 0  1      4  77096 467276 11871576    0    0  5503   336 6187 4404  1  4 81 14  0
 0  1      4  80312 469152 11863716    0    0  3864    26 5157 2085  0  1 86 14  0
 0  1      4  77016 471196 11859260    0    0  4785    68 5458 4898  1  5 81 13  0
 1  1      4  79320 472012 11850980    0    0  5079  1895 6298 2508  0  1 85 13  0
 3  1      4  79104 474516 11845392    0    0  4951   754 6324 4816  1  4 81 14  0
 0  1      4  75820 477668 11834292    0    0  3651   201 5537 4384  1  4 80 15  0


 CPUの処理時間を見ると、%Idleは80%以上あるように見える。NFSサーバなので、ディスクへのI/Oが処理の中心になるので、%wioが多いのは仕様である。
 このような状態のサーバでも、たまに「重い」と言われることがある。

 経験の浅いサーバ管理者だったら、「は?」とか思ってしまうかもしれない。
 しかし、topコマンドで見ると一発で答えがわかる。
[root@nfsserver ~]# top

top - 14:07:00 up 32 days,  8:52,  1 user,  load average: 1.81, 1.68, 1.24
Tasks: 469 total,   1 running, 468 sleeping,   0 stopped,   0 zombie
Cpu0  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  1.0%us,  5.0%sy,  0.0%ni,  0.0%id, 92.7%wa,  0.0%hi,  1.3%si,  0.0%st
Cpu4  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu5  :  0.3%us,  0.3%sy,  0.0%ni, 94.0%id,  4.0%wa,  0.3%hi,  1.0%si,  0.0%st
Cpu6  :  0.3%us,  0.7%sy,  0.0%ni, 97.4%id,  1.7%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu7  :  0.0%us,  0.3%sy,  0.0%ni, 95.3%id,  2.7%wa,  0.0%hi,  1.7%si,  0.0%st
Mem:  14363332k total, 14286036k used,    77296k free,   508620k buffers
Swap: 14679832k total,        4k used, 14679828k free, 11667896k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
29685 root      18   0  197m 124m  760 D    5  0.9   0:13.81 rsync
  463 root      10  -5     0    0    0 S    0  0.0  28:23.28 kswapd0
 4231 root      RT   0 88192 4328 2704 S    0  0.0  10:09.53 multipathd
27891 root      15   0     0    0    0 S    0  0.0   0:33.86 nfsd
28012 root      15   0     0    0    0 S    0  0.0   0:35.92 nfsd
28022 root      15   0     0    0    0 S    0  0.0   0:30.93 nfsd
28072 root      15   0     0    0    0 S    0  0.0   0:33.64 nfsd
29681 root      15   0 85124 3180 2464 S    0  0.0   0:00.98 sshd
32756 root      15   0 12976 1360  796 R    0  0.0   0:00.06 top
    1 root      18   0 10316  676  568 S    0  0.0   0:02.27 init
    2 root      RT   0     0    0    0 S    0  0.0   0:06.38 migration/0
    3 root      34  19     0    0    0 S    0  0.0   0:00.01 ksoftirqd/0

 イマドキのサーバはマルチコア・マルチプロセッサが当たり前なので、コア毎の状態を見る必要がある。
 「Cpu3」の状態を見てもらいたい。ここだけ%waの数値が「92.7」とかなっていることが判るだろう。

 これは何をしているのかというと、このコアがこのサーバのI/Oの多くをほぼ独占している状態にあることを意味している。(完全に独占しているとは言えないが…)

 たとえ、CPUがマルチコア・マルチプロセッサ化されたとは言っても、I/Oはまだまだ単一の処理しか対応できないのが現実である。ディスクにしてもネットワークにしても、ある瞬間にそのディスクやネットワークを使用できるスレッドはたった一つであり、誰かがディスクアクセスを行っているその瞬間は他の人はディスクアクセスが終了するか使用する権利が回ってくるまで待機させられることとなる。

 vmstatやsarコマンドをそのまま眺めているだけでは、こうした事象には気がつきにくくなっている。なにしろvmstatやsarコマンド、topも標準のままでは全てのコア・CPUの平均値しかレポートしないので、こうしたI/Oネックによるサーバの「重さ」に管理者が気がつかないということになってしまっているのであった。

 その意味でも、vmstatの「cpu」よりも「procs」に注目するようにと、以前のアーティクルで記述したのであった。「procs」は「ブロックされたプロセスの数」を表示しているので、上記サンプルのように、1/8のコアだけが忙しくても、現実に実行をブロックされたプロセスが発生すればprocsの欄にレポートされるのである。

 なお、topコマンドで各コア・プロセッサごとの処理状態を見たい場合は「1」を押す。すると、全体のCPU平均と、コア・プロセッサ毎の表示が切り替わる。また、sarコマンドでコア・プロセッサ毎の処理状態を確認したい場合は「-P ALL」オプションを付ける。ALLのかわりにCPUのIDを指定すると、そのコア・プロセッサだけ表示される。ちなみに -P ALLをつけた場合はこんな感じ。
00時00分01秒       CPU     %user     %nice   %system   %iowait    %steal     %idle
00時20分01秒       all      0.88      0.00      4.12     17.46      0.00     77.54
00時20分01秒         0      0.05      0.00      0.15      0.05      0.00     99.76
00時20分01秒         1      0.05      0.00      0.62      0.02      0.00     99.31
00時20分01秒         2      0.71      0.00      1.55     70.52      0.00     27.23
00時20分01秒         3      0.45      0.00      2.70     36.00      0.00     60.86
00時20分01秒         4      1.44      0.00      4.13      0.07      0.00     94.35
00時20分01秒         5      1.24      0.00      7.41     12.05      0.00     79.30
00時20分01秒         6      1.54      0.00      5.86     11.18      0.00     81.42
00時20分01秒         7      1.59      0.00     10.52      9.81      0.00     78.08

 この時間だと、cpu2がせっせとIO処理をしている(cpu3も結構がんばっている)が、全体としては17.46%にしか見えないので、「ま、まだ楽勝じゃん!?」とか思われてしまうこともしばしば。



 これが、「%Idle」の多い少ないだけでサーバの「重い」「軽い」を判断してはいけない理由の一つ。

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。