0

MaxClients 最適化 設定方法

Apacheの設定でMaxClientsの話題がよくありますが、
実際の最適化のやりかたを紹介します。

具体的にわかりやすく説明したので、参考になれば幸いです。

①apacheが1プロセスあたりに使用しているメモリ量を調べる

# ps auxwwなどでプロセス確認

 ”RSS”の行が使用メモリです。
障害が発生している時間帯内を検索し、最大値を見つけます。

psの結果を書き出し、vimなどで開いてください。

検索方法:
/(日) (時)

例:(障害発生日時が26日10時の場合)
/26 10

[n]キーを押すごとに次検索します。
下記の例では 96980 になります。
単位は KB です。

----------Mon Jun 27 12:08:01 JST 2015
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
www      17764  0.6  0.6 643900 96980 ?        Sl   10:55   0:04 /usr/local/apache2/bin/httpd -k start	←★
www      10109  0.6  0.5 617492 83984 ?        Sl   11:40   0:10 /usr/local/apache2/bin/httpd -k start
www      15330  0.5  0.5 612584 77700 ?        Sl   11:51   0:05 /usr/local/apache2/bin/httpd -k start
www      18339  0.5  0.4 684068 71888 ?        Sl   11:57   0:03 /usr/local/apache2/bin/httpd -k start
www      10441  0.6  0.4 618020 70392 ?        Sl   11:40   0:09 /usr/local/apache2/bin/httpd -k start
www      13866  0.7  0.4 617568 69892 ?        Sl   11:48   0:08 /usr/local/apache2/bin/httpd -k start
www      17148  0.6  0.4 616456 69876 ?        Sl   11:54   0:05 /usr/local/apache2/bin/httpd -k start
www      21777  0.8  0.4 607036 68500 ?        Sl   10:04   0:01 /usr/local/apache2/bin/httpd -k start
www       9572  0.6  0.4 613436 67812 ?        Sl   11:39   0:10 /usr/local/apache2/bin/httpd -k start
www      15588  0.6  0.4 612512 63284 ?        Sl   11:51   0:06 /usr/local/apache2/bin/httpd -k start
www      21165  0.4  0.3 605192 61244 ?        Sl   10:03   0:01 /usr/local/apache2/bin/httpd -k start
www      21415  0.4  0.3 611988 60652 ?        Sl   10:04   0:01 /usr/local/apache2/bin/httpd -k start
www      21381  0.5  0.3 607736 58956 ?        Sl   10:04   0:01 /usr/local/apache2/bin/httpd -k start
www      22129  0.5  0.3 609568 58480 ?        Sl   10:05   0:00 /usr/local/apache2/bin/httpd -k start
www      18946  0.4  0.3 610172 58052 ?        Sl   11:58   0:02 /usr/local/apache2/bin/httpd -k start
www      20078  0.2  0.3 551392 57028 ?        Sl   10:01   0:01 /usr/local/apache2/bin/httpd -k start
www      21715  0.4  0.3 543820 56860 ?        Sl   10:04   0:00 /usr/local/apache2/bin/httpd -k start
www      19593  0.2  0.3 606740 56412 ?        Sl   10:00   0:01 /usr/local/apache2/bin/httpd -k start
www      22574  0.6  0.3 543916 55436 ?        Sl   10:06   0:00 /usr/local/apache2/bin/httpd -k start
www      21413  0.3  0.3 603424 53520 ?        Sl   10:04   0:00 /usr/local/apache2/bin/httpd -k start
www      22476  0.3  0.3 539720 50524 ?        Sl   10:06   0:00 /usr/local/apache2/bin/httpd -k start
www      22942  0.5  0.2 596332 44628 ?        Sl   10:07   0:00 /usr/local/apache2/bin/httpd -k start
root      8585  0.0  0.1 206644 23908 ?        Ss   11:38   0:00 /usr/local/apache2/bin/httpd -k start

②httpd.conf確認

インストール方法にもよりますが、httpd.confファイルは、/etc/httpd/conf か /usr/local/apache2/conf/ などに格納されています。
詳しくは、httpd.confファイルのServerRootに設定されているディレクトリを確認してください。

“worker.c” を探します。
“MaxClients” で検索すると値がいくつか出てくる可能性がありますが、
今回変えるべきは “worker.c” の中にある値になります。


StartServers        10
ServerLimit        800	←★
MaxClients        7100	←★
MinSpareThreads    100
MaxSpareThreads    200
ThreadsPerChild     25	←★
MaxRequestsPerChild  0

★の行が設定に必要な値です。
記録しておいてください。

③1スレッドあたりに使用しているメモリ量を算出

apacheは1つのプロセス内にいくつかのスレッドを生成します。
1プロセスで生成されるスレッド数は “ThreadsPerChild” の値です。
なので、1スレッドあたりに使用しているメモリ量は以下になります。

1プロセスあたりの使用メモリ量(①で出た値) / ThreadsPerChild = 1スレッドあたりのメモリ量

今回の例では以下になります。

96980KB / 25 = 3879.2KB

④apacheに割り当てるメモリ量を決める

apacheに割り当てるメモリ用を決めます。
top でtotalメモリを確認します。

# top

Tasks: 135 total, 1 running, 134 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.1%sy, 0.0%ni, 99.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 15532032k total, 12375392k used, 3156640k free, 939548k buffers
Swap: 1052248k total, 0k used, 1052248k free, 9845920k cached

今回の例ではtotal 15532032k(約15GB) です。
totalメモリからシステムで使うメモリ、他のミドルウェアで使うメモリを引いた値を
apacheに割り当てます。ここは状況に応じて判断してください。

今回の例では15GBのうち、システムで使う1GBを引いた14GBをapacheに割り当てることとします。

⑤MaxClients算出

MaxClientsの値を算出します。

1スレッドあたりのメモリ量(③で出た値) * MaxClients = 割り当てるメモリ量

なので、

割り当てるメモリ量 / 1スレッドあたりのメモリ量 = MaxClients

となります。

今回の例では以下になります。

14000000KB(14GB) / 3879.2KB = 3608.99…

端数は切り捨てます。
MaxClients は 3600 となります。

⑥設定可能な値かどうか確認

最後に設定可能な値かどうか確認します。
以下の値が ServerLimit を超えてはいけません。

MaxClients / ThreadsPerChild = 最大プロセス数 < ServerLimit

今回の例では以下になります。

3600 / 25 = 144

今回の例では ServerLimit は 800 なので十分設定可能です。
もし、ServerLimit を上回った場合は ServerLimit を変更してください。

⑦httpd.conf シンタックスチェック&apache再起動

# /etc/init.d/httpd configtest

# /sbin/service httpd stop
# /sbin/service httpd start

※ 注 ※
SSL証明書の変更やモジュール追加の場合と同様、
gracefulによるリスタートでは設定反映されないので注意!

以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です