今日やったので、忘れないうちにメモ。
仕事でやったことなのであんまり細かい数字はだせなかったりする。
現状を確認するためのコマンド
- top
load averageを確認するのにいい。リアルタイムでプロセスのリストと一緒に確認できる。
- vmstat
仮想メモリ関係。プロセスやら、メモリやら、swap、ブロックデバイスから送受信したブロック数、CPUの使用時間の割合をみることができる
- iostat
ディスクI/Oの使用率やらなんやら表示
- ps
プロセス一覧表示
- free
使わなかった。orz
確認
今回は、ファイルサーバー兼Webサーバーがむちゃくちゃ重かったので、まずtopコマンドで確認。
CPUが100%近いことを確認して、CPUを使っているプロセスを探したところ、httpd が暴走している模様。*1
とりあえず、httpd を再起動したら直った。
まだ重いので、もう一度topを実行してみるが、load average が200〜300ぐらい。これは重いわけだ。
色々探してみるけど、それらしいところが見当たらない。
メモリ関係かと思い、vmstatでスワップを頻繁に書き出しているか見てみたが、それほど書き出しているわけではない。bi(block in)がちょっと多め。*2
# vmstat 2 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 0 3 56 13532 156448 401900 0 0 25 48 69 36 2 1 69 28 0 4 56 16384 147508 352584 0 0 2134 0 2661 1823 2 2 47 49 0 19 56 13772 148844 355096 0 0 2818 4 3031 1872 1 1 47 51 0 8 56 19136 146292 352232 0 0 2642 54 2672 1712 1 1 39 59 0 1 56 15428 147888 355056 0 0 2222 0 2098 1140 0 1 60 39 1 17 56 13544 145764 355460 0 0 2632 96 1795 1452 3 1 43 53 0 5 56 15708 147460 353200 0 0 2658 0 2251 1746 5 1 43 51 1 13 56 16832 147576 349428 0 0 3228 34 2608 1817 1 2 45 52 0 4 56 14816 147916 349204 0 0 3716 38 2675 1889 6 2 29 64 0 4 56 14032 146524 348160 0 0 3626 42 2529 1928 2 2 43 53 *3
次は iostat をつかってみた。すると %util *4が100%になっとる。
$ iostat -x -d 2 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 149.50 0.00 135.00 0.00 4004.00 0.00 29.66 1.62 12.00 5.70 100.00 *5
対策
I/O 関係がネックになっていることが判明。
とりあえず、カーネルが2.4だったので、2.6にするためにOSからインストール。*6
ついでに、hdparm -tT で書き込みテスト。
blockdev --setra で先読みの大きさを調整。
ついでに、httpd の MaxClients が1000になっていたので、256まで下げることにした。
結果
そしたら、load average が 3-5ぐらいになった。
わーい、よかったよかった。