【apache】MaxClientsの設定を最適化してみる〜チューニング入門
はじめに
apacheのチューニング入門でとりあえずMaxClientsをいじってみる
preforkしか使ったことないので今回はpreforkが対象
MaxClientsはtopコマンドしたときに出てくるhttpdプロセスの数の最大数
目安としてはhttpdがMaxClientsで設定した数まで増えたときにサーバーがいっぱいいっぱいにならないようにするところ
サーバーのスペック確認
計算しやすくするためにとりあえずapacheの子プロセスを1個に制限
# vi /etc/httpd/conf/httpd.conf ・・・ MaxClients 1
1プロセスのメモリ使用量確認
# top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND ・・・ 4204 apache 20 0 284m 27m 3652 R 62.2 4.5 0:36.52 httpd ・・・
RES列より27mくらいとわかる
メモリ使用量確認
# free total used free shared buffers cached Mem: 630888 98280 532608 540 4292 31936 -/+ buffers/cache: 62052 568836 Swap: 1023996 11612 1012384
- /+ buffers/cache:行のfree列より568mくらい空いていることがわかる
MaxClients=1としているので、568m/27m = 約21なのであと20プロセスくらいはいけると予測する
apache benchで実際に試してみる
コマンド例
$ ab -n 100 -c 20 http://192.168.33.20/
この例だと同時に20リクエストして合計100リクエストになるように実行される
今回は合計リクエスト数は100固定で同時接続数をいろいろ試してみた
request/second : 1秒に処理できたリクエスト数
request/time[ms] : 1リクエスト処理するのにかかった時間
同時接続数=10の場合
MaxClients | request/second | request/time[ms] |
10 | 4.80 | 208 |
20 | 4.22 | 237 |
30 | 4.54 | 220 |
40 | 4.85 | 206 |
50 | 4.56 | 219 |
256 | 5.18 | 193 |
同時接続数=20の場合
MaxClients | request/second | request/time[ms] |
10 | 5.00 | 199 |
20 | 4.79 | 208 |
30 | 5.06 | 197 |
40 | 5.20 | 192 |
50 | 4.09 | 244 |
256 | 4.32 | 231 |
同時接続数=30の場合
MaxClients | request/second | request/time[ms] |
10 | 4.66 | 214 |
20 | 4.65 | 215 |
30 | 2.75 | 363 |
40 | 2.57 | 388 |
50 | 2.32 | 432 |
256 | 2.46 | 407 |
同時接続数=40の場合
MaxClients | request/second | request/time[ms] |
10 | 5.42 | 184 |
20 | 4.52 | 221 |
30 | 2.35 | 424 |
40 | 0.85 | 1180 |
50 | 0.73 | 1378 |
256 | 0.77 | 1300 |
同時接続数=50の場合
MaxClients | request/second | request/time[ms] |
10 | 4.81 | 207 |
20 | 5.22 | 191 |
30 | 2.47 | 404 |
40 | 0.78 | 1284 |
50 | 0.43 | 2337 |
256 | 0.43 | 2337 |
だいたい予想どおりの結果になったかな