0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ApacheのMPMについて

Posted at

環境

Apache2.4.41
Ubuntu20.4

はじめに

MPMとはMulti Processing Moduleの略で、マルチプロセスを実現するための仕組みのことです。Webサーバーへの接続数が多くなってきた場合、シングルプロセスで処理をしていれば、効率が悪くなり、レスポンスの低下につながることになります。レスポンスを上げるためには、マルチプロセスで処理が行えるようチューニングを行う必要があります。Apache2.2系までは、シングルプロセスにしか対応していませんでしたが、Apache2.4系以降、マルチプロセスに対応できるようになっています。

MPMにはプロセス管理の仕方に、大きく3つの仕様が用意されています。

  • prefork
  • event
  • worker

preforkがシングルプロセスで、eventとworkerがマルチプロセスです。Apache2.2系まではpreforkで動いていたが、Apache2.4系以降は、eventがデフォルト値に採用されるようになりました。

確認

自分の環境で、MPMに何が設定されているかを確認するコマンドです。自分の環境はApache2.4.41なので、デフォルトでeventになっています。

$ apachectl -V | grep MPM
Server MPM:     event

大抵の場合、MPMにはeventを採用しておいて問題ないと思いますが、状況に応じて、他のMPMに変更することができます。MPMはモジュールで提供されており、Apache2をインストールすると3つともインストールされています。mods-availableディレクトリに保存されています。

$ls -l /etc/apache2/mods-available | grep mpm_
mpm_event.conf
mpm_event.load
mpm_prefork.conf
mpm_prefork.load
mpm_worker.conf
mpm_worker.load

mods_enabledディレクトリを見ると、eventだけが有効になっています。

$ls -l /etc/apache2/mods-enabled | grep mpm_
mpm_event.conf
mpm_event.load

mpm_prefork.confの設定を見ると、待機プロセスの最小値と最大値が設定できるディレクティブが存在します。

mpm_prefork.conf
MinSpareServers           5
MaxSpareServers          10

mpm_event.confの設定を見ると、待機プロセスではなく、待機スレッドの最小値と最大値を設定するディレクティブになっています。

mpm_event.conf
MinSpareThreads          25
MaxSpareThreads          75  

シングルプロセスであれば、1つの接続に対して1つのプロセスが起動しますが、マルチプロセスの場合、1つのプロセスの中で複数のスレッドが動き、1つ接続に対し1つのスレッドが起動します。

接続数が増えてくると新しいスレッドが起動されるため、その分レスポンスが遅くなることになります。また、接続数が少なくなってくると、無駄に起動しているスレッド数が多くなるため、メモリが圧迫されることになります。スレッドの値と接続数はトレードオフの関係になっています。

おまけ

PHPの環境でMPMの設定をする場合、PHPから提供されている、mod_phpといったモジュールが利用されます。こちらは、内部的にpreforkが使われています。eventに対応するには、php-fpmに変更することになります。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?