関連ページ
Apache(prefork MPM) + mod_php | 従来の方法 |
Apache(event MPM) + php-fpm | メモリ使用量を大きく減らす。 同時接続数増加時のパフォーマンス劣化も抑えられる |
# httpd -V [Tue Apr 13 23:40:31.103797 2021] [so:warn] [pid 8379:tid 140302715390080] AH01574: module status_module is already loaded, skipping AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::a00:27ff:fe15:777d. Set the 'ServerName' directive globally to suppress this message Server version: Apache/2.4.6 (CentOS) Server built: Oct 19 2017 20:39:16 Server's Module Magic Number: 20120211:24 Server loaded: APR 1.4.8, APR-UTIL 1.5.2 Compiled using: APR 1.4.8, APR-UTIL 1.5.2 Architecture: 64-bit Server MPM: event ★ threaded: yes (fixed thread count) forked: yes (variable process count) Server compiled with.... -D APR_HAS_SENDFILE -D APR_HAS_MMAP -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled) -D APR_USE_SYSVSEM_SERIALIZE -D APR_USE_PTHREAD_SERIALIZE -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT -D APR_HAS_OTHER_CHILD -D AP_HAVE_RELIABLE_PIPED_LOGS -D DYNAMIC_MODULE_LIMIT=256 -D HTTPD_ROOT="/etc/httpd" -D SUEXEC_BIN="/usr/sbin/suexec" -D DEFAULT_PIDLOG="/run/httpd/httpd.pid" -D DEFAULT_SCOREBOARD="logs/apache_runtime_status" -D DEFAULT_ERRORLOG="logs/error_log" -D AP_TYPES_CONFIG_FILE="conf/mime.types" -D SERVER_CONFIG_FILE="conf/httpd.conf"
マルチプロセス
マルチスレッド+非同期(nginx ライク)
マルチスレッド
■パッケージからインストールした場合 # apachectl -V | grep 'Server MPM' ■ソースからインストールした場合 # /usr/local/apache/bin/apachectl -V | grep 'Server MPM' Server MPM: Prefork または Server MPM: Worker
■パッケージからインストールした場合 # /usr/sbin/httpd -l ■ソースからインストールした場合 # /usr/local/apache2/bin/httpd -l
prefork.cがあるかevent.cがあるかで確認する。
/etc/httpd/conf.modules.d/00-mpm.conf
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so か LoadModule mpm_event_module modules/mod_mpm_event.so か LoadModule mpm_worker_module modules/mod_mpm_worker.so
「/etc/sysconfig/httpd」ファイルの「HTTPD=/usr/sbin/httpd.worker」の行をコメントアウトしてApacheを再起動する
HTTPD=/usr/sbin/httpd.worker
configure時のオプション
--with-mpm=prefork
/etc/httpd/conf.modules.d/10-mpmevent.conf
## 2coreの場合 <IfModule mpm_event_module> ServerLimit 5 StartServers 2 #core数 MinSpareThreads 64 #StartServers × ThreadsPerChild (2 x 32) MaxSpareThreads 128 ThreadLimit 5 ThreadsPerChild 32 MaxRequestWorkers 160 # ServerLimit × ThreadsPerChild (5 x 32) MaxConnectionsPerChild 1500 </IfModule>
## 2coreの場合 <IfModule mpm_event_module> ServerLimit 8 StartServers 2 #core数 MinSpareThreads 128 #StartServers × ThreadsPerChild (2 x 64) MaxSpareThreads 256 ThreadsPerChild 64 MaxRequestWorkers 512 # ServerLimit × ThreadsPerChild (8 x 64) MaxConnectionsPerChild 1500 </IfModule>
設定項目 | 説明 |
---|---|
ServerLimit | プロセス数の上限 |
StartServers | サーバ起動時に作られるプロセスの数 Number of Cores |
MinSpareThreads | アイドルスレッドの下限の個数 サーバが忙しくなってアイドルスレッドが減少した時にこの数まで増やされます。 StartServers × ThreadsPerChild ThreadsPerChildの倍数を指定 |
MaxSpareThreads | アイドルスレッドの上限の個数 サーバが暇になってアイドルスレッドが増えた時にこの数まで減らされます。 |
ThreadLimit | プロセスごとのワーカースレッドの上限 ThreadsPerChildよりも大きな値を指定する |
ThreadsPerChild | プロセス内に用意するワーカースレッドの数 |
MaxRequestWorkers | 全プロセス合計のワーカースレッドの総数 応答できる同時リクエスト数。 PreforkのMaxClients。 ServerLimit × ThreadsPerChild |
MaxConnectionsPerChild | プロセスが指定した回数の接続を受け付けたらプロセスを終了します。 0を指定すると終了しなくなります。 |
<IfModule mpm_prefork_module> StartServers 256 MinSpareServers 1 MaxSpareServers 256 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 5000 MaxMemFree 1024 </IfModule>
1プロセスあたりメモリーが4MBだと、1G使われます。
設定項目 | 説明 |
---|---|
StartServers | 起動時に生成される子サーバプロセスの数。 デフォルトは5。 |
MinSpareServers | アイドル状態にいる子サーバプロセスの最小(希望)個数。 デフォルトは5 常にこの数のプロセスはアイドルでいてくださいね、という値。 |
MaxSpareServers | アイドル状態にいる子サーバプロセスの最大(希望)個数。 デフォルトは10。 アイドル状態の子サーバプロセスの数がこの値をこえた時は小サーバプロセスを殺してくださいね、という値。 |
ServerLimit | MaxClientsに指定可能な値の上限 MaxClientsより多い値ならなんでもよい |
MaxClients | 応答できる同時リクエスト数。 デフォルトは256。 |
MaxRequestsPerChild | 個々の子サーバプロセスが扱うことのできるリクエストの総数。 子サーバプロセスが起動してからこの数だけリクエストを捌くとなくなる。 デフォルトは10000。 メモリリーク対策。 |
MaxMemFree | この値を超えたメモリはOSに帰る |