httpd2.2的三种MPM的实现

httpd2.2的三种MPM的实现

1、Centos7系统下实现httpd-2.2的安装,并分别实现prefork、worker、event等几种工作方式
实验环境
IP 192.168.253.135
系统:CentOS7
httpd版本:2.2.15
systemctl stop firewalld
setenforce 0
cd /usr/local/src
useradd -M -s /sbin/nologin httpd
yum install -y gcc gcc-devel zlib-devel bzip2 apr apr-util
wget http://archive.apache.org/dist/httpd/httpd-2.2.15.tar.bz2
tar -xf httpd-2.2.15.tar.bz2
cd httpd-2.2.15
./configure –prefix=/usr/local/httpd-2.2–enable-so –with-mpm=worker
###–with-mpm=worker 这里可以填写工作模式 这里用worker模式示范
make && make install
ln -sv /usr/local/httpd-2.2/ /usr/local/httpd
PATH=”/usr/local/httpd/bin:$PATH”
echo ‘PATH=”/usr/local/httpd/bin:$PATH”‘ > /etc/profile.d/httpd
chown -R httpd.httpd /usr/local/httpd
chown -R httpd.httpd /usr/local/http-2.2

可以看到 worker已经编译进来了
httpd2.2的三种MPM的实现clipboard
启动
clipboard
apache的MPM模块
不同的操作系统默认使用不同的MPM
Netware
mpm_netware
OS/2
mpmt_os2
Unix
prefork,worker 或 event,取决于平台特性
Windows
mpm_winnt
这里只讨论一下linux相关的 prefork,worker和event
要求 更高伸缩性的站点可以选择使用线程的 MPM,即 worker 或 event; 需要可靠性或者与旧软件兼容的站点可以使用 prefork。
prefork模块
apache会在启动的时候预先维护几个空闲或备用的进程,这些进程已经随时可以提供服务,通过这种方式
客户端不需要因为等待子进程被fork而降低用户体验
相关的调节性能参数
  1. # prefork MPM
  2. # StartServers: 服务开启时默认启动的工作进程数,不包括主进程
  3. # MinSpareServers: 最小空闲进程数,如果少于设置的数量,父进程会创建新的子进程,并且产生的速度是
  4. 第一秒1个 第二秒2个,第三秒4个 以指数形势增长,直到每秒产生32个子进程,
  5. 只有满足设置的数量才会停止创建子进程
  6. # MaxSpareServers: 最大空闲进程数,空闲的进程是不处理请求的进程,如果存在多余设置的值,父进程
  7. 会主动终止多余的子进程
  8. # MaxRequestWorkers: 并发请求的最大数,一条进程最多能处理多少个请求
  9. # MaxConnectionsPerChild: 每个子进程在生命周期内所能够服务的最多请求个数
  10. 默认的设置
  11. <IfModule mpm_prefork_module>
  12. StartServers 5
  13. MinSpareServers 5
  14. MaxSpareServers 10
  15. MaxRequestWorkers 250
  16. MaxConnectionsPerChild 0
  17. </IfModule>

 

worker模块
这是一个多进程多线程的混合的模式,她也会预先fork一些子进程,然后每个子进程创建一些线程,当请求过来的时候,
会分配线程来提供服务,因为线程会更轻量所以在高并发的场景这个模式会用的比较多
相关的调节参数
  1. # worker MPM
  2. # StartServers: apache启动时候创建的子进程数量
  3. # MinSpareThreads: 最小空闲线程数,如果服务
  4. 器中没有足够的空闲线程,则会创建子进程,直到空闲线程数量大于设定值
  5. # MaxSpareThreads: 最大空闲线程数
  6. # ThreadsPerChild: 该指令设置每个子进程创建的线程数
  7. # MaxRequestWorkers: 每个子进程在生命周期内所能够服务的最多请求个数,0表示不限定
  8. # MaxConnectionsPerChild:一个子进程最大处理的连接数
  9. 默认的设置
  10. <IfModule mpm_worker_module>
  11. StartServers 3
  12. MinSpareThreads 75
  13. MaxSpareThreads 250
  14. ThreadsPerChild 25
  15. MaxRequestWorkers 400
  16. MaxConnectionsPerChild 0
  17. </IfModule>

event模块
event是基于worker的一个模块,一个父进程启动子进程,每个子进程根据ThreadsPerChild的值创建固定数量的线程,尽管HTTP的Keepalive方式能减少TCP连接数量和网络负载,但是 Keepalive需要和服务进程或者线程绑定,这就导致一个繁忙的服务器会耗光所有的线程。 Event MPM是解决这个问题的一种新模型,他可以将keepalive的连接转移到监听的线程,如果有新的请求过来,将会转发到第一个可用的线程,这样就可以缓解由于keepalive服务器繁忙而线程耗尽的问题,注意一点,event MPM需要Linux系统(Linux 2.6+)对EPoll的支持,才能启用。还有,需要补充的是HTTPS的连接(SSL),它的运行模式仍然是类似worker的方式,线程会被一直占用,直到连接关闭。
  1. # event MPM
  2. # StartServers: apache启动时候创建的子进程数量
  3. # MinSpareThreads: 最小空闲线程数,如果服务器中没有足够的
  4. 空闲线程,则会创建子进程,直到空闲线程数量大于设定值
  5. # MaxSpareThreads: 最大空闲线程数
  6. # ThreadsPerChild: 该指令设置每个子进程创建的线程数
  7. # MaxRequestWorkers: 每个子进程在生命周期内所能够服务的最多请求个数,0表示不限定
  8. # MaxConnectionsPerChild:一个子进程最大处理的连接数
  9. <IfModule mpm_event_module>
  10. StartServers 3
  11. MinSpareThreads 75
  12. MaxSpareThreads 250
  13. ThreadsPerChild 25
  14. MaxRequestWorkers 400
  15. MaxConnectionsPerChild 0
  16. </IfModule>

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/112319

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code