ホーム > apache, Linux > apacheの同時接続数(MaxClients)を検証する

apacheの同時接続数(MaxClients)を検証する

2014 年 12 月 20 日

最近は、サーバネタで押してきます(^^;

先日、httpdのエラーログで不正なアクセスなどないか確認していたときに見慣れないログをapacheが吐いていた。

vi /var/log/httpd/error_log
[Tue Dec 16 16:53:09 2014] [error] server reached MaxClients setting, consider raising the MaxClients setting

こちらのサイト同時接続数(MaxClients)をいくつに設定すべきか?によるとMAXClientsの数値が低い場合にこのメッセージが出力されるらしい。

ということで参考にしていろいろと調べてみた。

するとhttpd.confの設定でapacheのホームページでは、”MaxClients は、リクエストに応答するために起動される 子プロセスの最大数となります。 デフォルト値は 256 で、これを増加させたい場合は、 ServerLimit の値も増加させる必要があります。”
となっています。

実際のconfを覗いてみると

<IfModule prefork.c>
StartServers       10
MinSpareServers    5
MaxSpareServers   15
ServerLimit      256
MaxClients       50
MaxRequestsPerChild  1000
</IfModule>

ちなみに以前にも同様のログが出たのでMaxClientsの値を40 → 50に変更していました。

しかし、今回のエラーログが出たのでまたチューニング(MaxClientsを増やす?)が必要なようです。

まずhttpdプロセスのメモリ使用量は、というと

[root@local]# top -a

top - 18:24:25 up 32 days, 11:46,  3 users,  load average: 0.01, 1.13, 7.70
Tasks: 119 total,   1 running, 117 sleeping,   1 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1020168k total,   528124k used,   492044k free,     9860k buffers
Swap:  2097148k total,   343364k used,  1753784k free,    56536k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
28188 apache    20   0  311m  47m 3892 S  0.0  4.8   0:03.98 httpd
28095 apache    20   0  301m  36m 5020 S  0.0  3.7   0:02.77 httpd
28098 apache    20   0  300m  36m 4968 S  0.0  3.6   0:04.68 httpd
28096 apache    20   0  300m  36m 3932 S  0.0  3.6   0:05.69 httpd
28091 apache    20   0  299m  35m 3972 S  0.0  3.6   0:07.64 httpd
28097 apache    20   0  297m  34m 3944 S  0.0  3.4   0:05.14 httpd
28092 apache    20   0  297m  33m 3848 S  0.0  3.4   0:06.32 httpd
28093 apache    20   0  297m  33m 3884 S  0.0  3.4   0:04.64 httpd
28094 apache    20   0  297m  33m 3956 S  0.0  3.4   0:06.54 httpd
28185 apache    20   0  296m  32m 3832 S  0.0  3.2   0:00.77 httpd
28099 apache    20   0  295m  32m 3940 S  0.0  3.2   0:03.93 httpd
28090 apache    20   0  295m  31m 3964 S  0.0  3.2   0:03.76 httpd
28186 apache    20   0  287m  23m 3940 S  0.0  2.4   0:02.42 httpd
28088 root      20   0  274m  10m 5468 S  0.0  1.1   0:00.15 httpd
18448 mysql     20   0 1337m  10m 2940 S  0.0  1.1  30:32.41 mysqld
28187 apache    20   0  274m 7172 1460 S  0.0  0.7   0:00.01 httpd
28190 apache    20   0  274m 7140 1432 S  0.0  0.7   0:00.00 httpd

大体ですがRESの項目が使用量らしいので大雑把にみて1つのプロセスで35Mくらいでしょうか?

けれどきちんと計算したいなぁと思ったら計算式で出せる技を持っている方がいらっしゃったので使わせていただきました。

ビジネスアプリケーション部会Blog

[root@local ~]# ps aux | grep [h]ttpd | grep [a]pache | awk 'BEGIN{x=0}{x+=$6}END{print x/NR}'
35786.1

ざっくりの計算とほぼ同じですね。たまたま合ってました(笑)

そしてこのhttpdに使用できるメモリ量は、
freeコマンドより算出できるようです。

[root@www16071ue ~]# free
             total       used       free     shared    buffers     cached
Mem:       1020168     615464     404704         92      12332      63740
-/+ buffers/cache:     539392     480776
Swap:      2097148     342804    1754344

-/+ buffers/cache: のfreeの部分だそうです。
ただし現在もhttpdでプロセスが起動しているので現在のhttpd.confの設定+αというところでしょうか。

maxclients= 50(現在のhttpd.confの設定)+ 480776(空いているメモリ量)/35786.1(子プロセスの平均メモリ量)
= 50 + 13.43….
≒ 63

この計算でいくと今の設定+13くらいが妥当なようです。
ただし他にも起動させているMYSQLだとかもあるので一筋縄では、いかないと思いますが、とりあえず+10で様子を見るようにします。

それとhttpd.confの設定ですがServerLimitとMaxClientsは、同値の方が多いのでここは、同じく60で設定して様子を診てみようかと思います。

ということ下記になります。

<IfModule prefork.c>
StartServers       10
MinSpareServers    5
MaxSpareServers   15
ServerLimit      60
MaxClients       60
MaxRequestsPerChild  1000
</IfModule>

エラーログに出てこないことを祈ります。

追記20141224

また同様のログが出たので若干の修正をしました。

<IfModule prefork.c>
StartServers             10
MinSpareServers           5
MaxSpareServers          15
ServerLimit             100
MaxClients              100
MaxRequestsPerChild     750
</IfModule>

*****************************************************************************

追記 20150901 上記の設定で現在のところエラーログも出ずに安定稼動しております。
**********************
参考までに現在のサーバ環境
centos6
メモリ 1 GB
ディスク HDD 100 GB
CPU 2コア

wordpress+apache+mysqlなどなど
基本的なブログサーバです

カテゴリー: apache, Linux タグ: ,
コメントは受け付けていません。