Apache/httpd(4)之配置MPM模块

Apache/httpd(4)之配置MPM模块

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:

前面已经有介绍过 MPM,它是多路处理模块,常见的有 perforkworkerevent
httpd-2. 2 不支持同时编译多个模块,所以只能编译时选定一个。
rpm 安装的包提供三个二进制程序文件,分别用于实现对不同MPM机制的支持。
要查看当前使用的是哪种,直接直接通过进程信息查看启动该程序的命令判定使用的哪个二进制程序文件

$ ps aux | grep httpd
root       2465  0.0  0.3 186356  3972 ?        Ss   15:40   0:00 /usr/sbin/httpd
apache     2469  0.0  0.3 186492  3192 ?        S    15:40   0:00 /usr/sbin/httpd
apache     2470  0.0  0.2 186492  2620 ?        S    15:40   0:00 /usr/sbin/httpd
...

可以看到默认为 /usr/sbin/httpd,其使用 prefork 模型。
可通过 -l 选项查看静态编译进 httpd 核心的模块:

$ httpd -l
Compiled in modules:
  core.c
  prefork.c
  http_core.c
  mod_so.c
$ httpd.event -l
Compiled in modules:
  core.c
  event.c
  http_core.c
  mod_so.c

还可通过 -M 选项查看所有模块(包括静态编译和动态装载的模块):

$ httpd -M
httpd: apr_sockaddr_info_get() failed for zze.host
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
Loaded Modules:
 core_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 auth_basic_module (shared)
 auth_digest_module (shared)
 ...

如果要修改使用的 MPM 模块,修改 /etc/sysconfig/httpd 配置文件中的 HTTPD 字段即可,以修改为 worker 模型为例:

HTTPD=/usr/sbin/httpd.worker

修改保存后重启服务,查看进程信息如下:

$ ps aux | grep httpd
root       2579  0.0  0.4 186560  4172 ?        Ss   16:05   0:00 /usr/sbin/httpd.worker
apache     2584  1.5  0.5 530820  5356 ?        Sl   16:05   0:00 /usr/sbin/httpd.worker
apache     2585  0.6  0.5 530820  5360 ?        Sl   16:05   0:00 /usr/sbin/httpd.worker
apache     2586  2.9  0.5 530820  5360 ?        Sl   16:05   0:00 /usr/sbin/httpd.worker

/etc/httpd/conf/httpd.conf 配置文件中专门提供了 prefork 和 worker 模型的配置,默认如下:

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

<IfModule worker.c>
StartServers         4
MaxClients         300
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>

prefork 配置各字段的描述如下:

  • StartServers:指定服务启动时启动多少个服务进程,这个服务进程指的是能够处理用户请求的主控进程的子进程;
  • MinSpareServers:最少空闲进程数;
  • MaxSpareServers:最大空闲进程数;
  • MaxClients:同时最多启动的服务进程数;
  • ServerLimit:为 MaxClients 提供的最大限制服务进程数;
  • MaxRequestsPerChild:一个服务进程最多相应的请求数;

worker 配置各字段描述如下:

  • StartServers:服务器启动时启动的进程数;
  • MaxClients:服务器端最多启动线程数量;
  • MinSpareThreads:最少空闲线程数;
  • MaxSpareThreads:最大空闲线程数;
  • ThreadsPerChild:每个进程所能够启动的线程数;
  • MaxRequestsPerChild:每个线程所能够响应的最大请求数量;

设定的默认启动的进程数为 4,但实际我们查看进程时会发现只启动了三个,这是因为在默认配置中由于最大启动线程数为 75,每个进程启动的线程数为 25,三个进程启动的线程数就到达线程最大上限了。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/apachehttpd4.html

Buy me a cup of coffee ☕.