debian パフォーマンスチューニング

今日やったので、忘れないうちにメモ。
仕事でやったことなのであんまり細かい数字はだせなかったりする。

現状を確認するためのコマンド
  • 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ぐらいになった。
わーい、よかったよかった。

*1:statusがR、CPUつかいまくり

*2:2000〜3000ぐらい

*3:数値は適当です

*4:使用率?

*5:数値は適当です

*6:aptitude からカーネルアップデートしようとしたら、カーネルが消えてしまって再起動できなくなった。会社の人にdebianのinstall CDを持ってきてもらって、それで再インストール