前面已经有介绍过 MPM,它是多路处理模块,常见的有 perfork
、worker
、event
。
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,三个进程启动的线程数就到达线程最大上限了。
评论区