WordPress DockerコンテナのApacheの子プロセス生成を制御してメモリを節約する

前回SWAPのチューニングをして少し安定化したのですが、一定時間経つとやはり挙動不審になるのでさらなるメモリ節約に取り組むことにしました。

Apacheがやばい

以下はTOPコマンド起動後 SHIFT+Mでメモリ使用量順に並べたものです。ずらっとapache2が並びます。SHRも大きめなので実際に確保されている物理メモリ量は少なそうですが、VIRTがそれぞれ300MB前後となっており、メモリに対してすくなからず影響がありそうです。そもそもこんなに並べるのはやめてくれ。

すべては応答速度向上のため

どうやらApacheには自動で子プロセスを立ち上げたり殺したりする機能があり、これによって自動でプロセスが立ち上がるようです。設定は/etc/apache2/mods-available/mpm_prefork.conf に記載があります。

root@f7a659fd949b:/etc/apache2/mods-enabled# cat mpm_prefork.conf
 StartServers 5
 MinSpareServers 5
 MaxSpareServers 10
 MaxRequestWorkers 150
 MaxConnectionsPerChild 0

最大で150プロセスまで立ち上がる?

コンフィグをコンテナから外だしにしてマウントさせることにしました。

$ sudo docker cp docker_wp01_1:/etc/apache2 ./app/wp01/etc/

docker-composeファイルは以下

$ cat docker-compose.yml
version: "2"
 services:
  wp01:
   image: wordpress:latest
   ports:
     - 32701:80
   environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_PASSWORD: password
      WORDPRESS_DB_NAME: wp01
   restart: always
   depends_on:
     - db
   volumes:
     - ./app/wp01/html:/var/www/html
     - ./app/wp01/etc/apache2:/etc/apache2

コンフィグは以下 勝手に増えないように全てを5に設定

$ vi etc/apache2/mods-available/mpm_prefork.conf
StartServers 5
MinSpareServers 5
MaxSpareServers 5
MaxRequestWorkers 5
MaxConnectionsPerChild 0

WEBサイトが遅くなったのではないかと思われるかもしれませんが、一人がアクセスするぐらいでは、遅くなったことを体感できませんでした。これによって運用が続いても動作が安定するようになりました。

追記

実際に性能試験してみました。こちら

参考

投稿を作成しました 112

WordPress DockerコンテナのApacheの子プロセス生成を制御してメモリを節約する” に1件のコメント

コメントを残す

関連する投稿

検索語を上に入力し、 Enter キーを押して検索します。キャンセルするには ESC を押してください。

トップに戻る
%d人のブロガーが「いいね」をつけました。