减少 mpm prefork 上的子进程数量

减少 mpm prefork 上的子进程数量

我有一个通过 Apache2 提供服务的小型 CGI 应用程序,我想减少 Apache2 维护的子进程数量。

这是我的配置(非常基本)mpm_prefork.conf

$ cat /etc/apache2/mods-enabled/mpm_prefork.conf 

<IfModule mpm_prefork_module>
    StartServers      1
</IfModule>

以下是我发现的关于的内容StartServers

StartServers指令设置启动时创建的子服务器进程的数量。


以下是 Apache 维护的进程数:

$ /etc/init.d/apache2 status
 apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/apache2)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─forking.conf
   Active: active (running) since mar 2018-03-06 10:16:36 CST; 16min ago
  Process: 9905 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
  Process: 10117 ExecReload=/etc/init.d/apache2 reload (code=exited, status=0/SUCCESS)
  Process: 9928 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/apache2.service
           ├─ 9942 /usr/sbin/apache2 -k start
           ├─10150 /usr/sbin/apache2 -k start
           ├─10151 /usr/sbin/apache2 -k start
           └─10152 /usr/sbin/apache2 -k start

mar 06 10:16:36 server001 apache2[9928]: Starting web server: apache2.
mar 06 10:16:36 server001 systemd[1]: Started LSB: Apache2 web server.
mar 06 10:26:12 server001 systemd[1]: Reloading LSB: Apache2 web server.
mar 06 10:26:12 server001 apache2[10050]: Reloading web server: apache2.
mar 06 10:26:12 server001 systemd[1]: Reloaded LSB: Apache2 web server.
mar 06 10:33:29 server001 systemd[1]: Reloading LSB: Apache2 web server.
mar 06 10:33:29 server001 apache2[10117]: Reloading web server: apache2.
mar 06 10:33:29 server001 systemd[1]: Reloaded LSB: Apache2 web server.


每个子进程都会消耗超过 50Mb 的空间,说实话,对于我所拥有的应用程序类型来说,只需一个子进程就足够了。

$ ps -ylC apache2
S   UID   PID  PPID  C PRI  NI   RSS    SZ WCHAN  TTY          TIME CMD
S     0  9942     1  0  80   0 25976 56792 -      ?        00:00:00 apache2
S    33 10150  9942  0  80   0  8416 36091 -      ?        00:00:00 apache2
S    33 10151  9942  0  80   0  8864 36097 -      ?        00:00:00 apache2
S    33 10152  9942  0  80   0  8716 56798 -      ?        00:00:00 apache2

以下是我的问题:

  • 为什么我仍然有一个主进程 + 3 个子进程,而不是一个主进程 + 1 个子进程?
  • 为了减少子进程的数量,我应该使用什么配置?


我对 Apache2 还不太熟悉。所以请耐心等待我的疑问。

答案1

根据您的需求,您可以使用以下设置将 prefork 中的进程数量限制为 2 个:

Startservers 1
MinSpareServers 1
MaxSpareServers 2
MaxRequestWorkers 2
ServerLimit 2
MaxconnectionsPerChild 0

相关内容