MPMとは
マルチプロセッシングモジュール (MPM)の略。
マルチコアなサーバーで、WEBサーバーの処理を、どうこなすか・・・
apache 1.3時代は一つでしたが、最近は、「3つ」の方法があります。
prefork
worker
event
worker
event
の3つの手法です。
デフォルトでは、初期の時代からある「prefork」です。
最新の技術を用いて、nginxのように高速/大量の処理をしてくれるのが、「event」になります。
参考サイト
マルチプロセッシングモジュール (MPM) - Apache HTTP サーバ バージョン 2.4
稼働しているapacheが、どのタイプか・・・
# /usr/local/apache2/bin/httpd -V | grep MPM Server MPM: event
↑と、コマンドラインから確認ができます。
上記では、「event」となります。
メモリ逼迫のサーバー
あるサーバーのメモリ状態を見てみると、メモリの空きがない状態・・・
1 [ 0.0%] 2 [ 0.0%] 3 [* 0.7%] Mem[|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||1.80G/1.95G] Swp[|||||||||||||||||||||||||||||||||||||||||||||||| 2.39G/4.00G]
↑htopコマンドで、見てみると、実メモリの他にスワップも使っています。
「Mem」のところが実メモリです。「1.80G/1.95G」と空きがない状態です・・・
# ps aux --sort rss USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND www 32168 0.1 5.9 2814884 121052 ? Sl 16:04 0:27 /usr/local/apache2/bin/httpd -k start www 32184 0.3 14.8 2889100 304092 ? Sl 16:04 0:59 /usr/local/apache2/bin/httpd -k start www 32169 0.2 24.6 2869284 503544 ? Sl 16:04 0:42 /usr/local/apache2/bin/httpd -k start www 32292 0.7 34.1 2935508 699420 ? Sl 16:05 1:53 /usr/local/apache2/bin/httpd -k start
↑httpd (apache)のメモリ利用率が高いです。
●プロセスとスレッド
apache mpmにおいて、「event」(及び、workerも)では、「スレッド」で、リクエストを待ち受けます。
メモリが逼迫している状態で、スレッドの数を見てみましょう。
# ps -efL |grep http |grep -v grep |wc -l 110
↑110ほどのスレッドが起動しています。
# ps -ef |grep http |grep -v grep|wc -l 6
↑プロセスは、6です。
apache mpm調整
httpd-mpm.conf
ファイルで、
<IfModule mpm_event_module> StartServers 3 MinSpareThreads 75 MaxSpareThreads 250 ThreadsPerChild 25 MaxRequestWorkers 400 MaxConnectionsPerChild 0 </IfModule>
↑が、デフォルトの設定です。
<IfModule mpm_event_module> ServerLimit 2 StartServers 2 MinSpareThreads 50 MaxSpareThreads 50 ThreadsPerChild 25 MaxRequestWorkers 25 MaxConnectionsPerChild 0 </IfModule>
↑今回、上記のように設定しました。
1 [ 0.0%] 2 [ 0.0%] 3 [ 0.0%] Mem[||||||||||||||||||||||||||||||||||||||||||||||#######****************1.12G/1.95G] Swp[|||||||||| 462M/4.00G]
↑メモリ利用率が抑えられました。
「MaxRequestWorkers」が重要です。
この数は、リクエストを待つスレッド数の最大数です。
この数が多いと、メモリを多く使います。
サーバーの実装メモリと、サーバーの応答状態などのバランスをみて、調整をしましょう。