深入理解Apache

MPM(Multi-Processing Modules)

MPM翻译过来就是并发处理模块,Apache的MPM有prefork、worker、event等多种模式

1
2
3
4
5
6
7
8
#查看当前apache使用模式
apachectl -l
Compiled in modules:
core.c
mod_so.c
http_core.c
prefork.c # 在此使用prefork模式

prefork(linux默认使用)

prefork是多进程模型,没有线程的概念,一个进程处理一个连接。

优点是每个子进程独立处理对应的请求,这样一个请求出问题就不会影响到其他请求
缺点是占用系统资源较多

修改最大连接数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# vim /usr/local/etc/apache2/2.4/httpd.conf 去掉mpm配置注释
Include /usr/local/etc/apache2/2.4/extra/httpd-mpm.conf
# vim /usr/local/etc/apache2/2.4/extra/httpd-mpm.conf
<IfModule mpm_prefork_module>
StartServers 5 # 启动时创建的子进程数
MinSpareServers 5 # 空闲时最小子进程数
MaxSpareServers 10 # 空闲时最大子进程数
MaxRequestWorkers 250 # 最大并发连接连接数,默认256。连接数超过后将会排队。
ServerLimit 1000 # MaxRequestWorkers可配置的最大值
MaxConnectionsPerChild 0 # 进程最大处理连接次数,超过后进程死亡。默认设置为0,表示一直生效。
</IfModule>
apache进程数依据负载会不断动态变化
如果MaxRequestWorkers和ServerLimit设置的过高,超过了系统能够承担的量,那么apache将无法启动或变得不稳定

worker

worker是多进程多线程模型,一个线程处理一个连接。

event

event是worker的变种。

参考

apache MPM模块官方参数文档