Apache Multipath Processing Module
废话不多说直接上图:prefork模型
StartServers 8 # 默认启动的工作进程数;
MinSpareServers 5# 最少空闲进程数;
MaxSpareServers 20# 最大空闲进程数;
ServerLimit 256 # 最大活动进程数;
MaxClients 256# 并发请求的最大数;
MaxRequestsPerChild4000 # 每个子进程在生命周期内所能够服务的最多请求个数;
prefork采用的是预派生子进程方式,用子进程处理不同的请求, 每个请求对应一个子进程,进程之间是彼此独立的。当apache启动后会先启动StartServers个子进程,等待1秒后会再创建两个,再等待1秒后创建4个,再一秒后创建8个这样直到创建满MinSpareServers个子进程为止,那么此时MinSpareServers个子进程会待命,这种待命模式不必在新请求到来时重新创建, 一定程度上加快了进程的响应速度。每个子进程占用内存25M内存,如果我记得没有错的话,特点以: 稳定著称
# service httpd start
# ps -elHF | grep httpd
1 S root 2635 1080 0 - 46071 poll_s3840 0 07:55 ? 00:00:00 /usr/sbin/httpd
5 S apache 26382635080 0 - 46071 inet_c2436 0 07:55 ? 00:00:00 /usr/sbin/httpd
5 S apache 26392635080 0 - 46071 inet_c2436 0 07:55 ? 00:00:00 /usr/sbin/httpd
5 S apache 26402635080 0 - 46071 inet_c2436 0 07:55 ? 00:00:00 /usr/sbin/httpd
5 S apache 26412635080 0 - 46071 inet_c2436 0 07:55 ? 00:00:00 /usr/sbin/httpd
5 S apache 26422635080 0 - 46071 inet_c2436 0 07:55 ? 00:00:00 /usr/sbin/httpd
5 S apache 26432635080 0 - 46071 inet_c2436 0 07:55 ? 00:00:00 /usr/sbin/httpd
5 S apache 26442635080 0 - 46071 inet_c2436 0 07:55 ? 00:00:00 /usr/sbin/httpd
5 S apache 26452635080 0 - 46071 inet_c2436 0 07:55 ? 00:00:00 /usr/sbin/httpd
apache Worker模型
StartServers 4 # 默认启动的工作进程数;
MaxClients 300#并发请求的最大数;
MinSpareThreads 25#最小空闲线程数;
MaxSpareThreads 75#最大空闲线程数;
ThreadsPerChild 25#每个子进程可生成的线程数;
MaxRequestsPerChild0#每个子进程在生命周期内所能够服务的最多请求个数,0表示不限定;
worker 模型相对于prefork模型来说就相对没那么稳定了,因为worker是基于线程工作的,在线程的环境下,如下图所示:同一个进程的中的多个线程的资源是共享的,如果用户请求的资源,由一个线程回应,如果这个线程奔溃了,那么这个进程中共享资源的线程就全军覆没啦.
切换为worker模型:这里为什么是三个呢?因为这是红帽特别设置的,也许红帽认为这样设置更适合现在的应用场景吧!
# vim /etc/sysconfig/httpd
# grep '^HTTPD' /etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker
# ps -elHF | grep httpd
1 S root 2720 1080 0 - 46122 poll_s4044 0 08:12 ? 00:00:00 /usr/sbin/httpd.worker
5 S apache 27232720080 0 - 132187 pipe_w 3288 0 08:12 ? 00:00:00 /usr/sbin/httpd.worker
5 S apache 27242720080 0 - 132187 pipe_w 3292 0 08:12 ? 00:00:00 /usr/sbin/httpd.worker
5 S apache 27262720080 0 - 132187 pipe_w 3296 0 08:12 ? 00:00:00 /usr/sbin/httpd.worker
Apache event 模型;
Apache event一个线程响应多个请求,event-driven: 事件驱动,主要目的在于实现单线程响应多个请求;event,为什么能够一个线程能够详细多个用户请求呢?它其实是基于网络I/O模型中的I/O复用去实现的,什么是网络I/O复用?这里比较复杂,所以我们会专门写一篇关于网络I/O模型,以及磁盘I/O模型的博客.在httpd2.4.9中开始正式采用这种基于事件的模型.所以想用最新的特性,最新的功能就必须编译安装,你懂得; event每一个进程占用内存的空间很大.使用场景比如说淘宝,百度每天的请求都是海量的.你懂的,前两种模型就不是很适合这种高并发请求的应用场景.
httpd-2.4 编译安装
依赖于更高版本的apr和apr-util。apr全称为apache portable runtime
(1) 解决依赖关系,(2) 编译安装apr-1.5.0 (3) 编译安装apr-util-1.5.2 (4) httpd编译安装 --with-mpm=event
#yum -y install pcre-devel
#tar xf apr-1.5.0.tar.bz2
#cd apr-1.5.0
#./configure --prefix=/usr/local/apr
#make && make install
#tar xf apr-util-1.5.2.tar.bz2
#cd apr-util-1.5.2
#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
#make && make install
# tar xf httpd-2.4.9.tar.bz2
# cd httpd-2.4.9
# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-modules=most --enable-mpms-shared=all --with-mpm=event
# make && make install
Apache 2.4.9 配置文件采用的是模块化分散的机制;httpd编译安装默认的用户就是daemon;
# ls
extrahttpd.confmagicmime.typesoriginal
# ls
httpd-autoindex.confhttpd-info.conf httpd-mpm.conf httpd-userdir.conf
httpd-dav.conf httpd-languages.confhttpd-multilang-errordoc.confhttpd-vhosts.conf
httpd-default.conf httpd-manual.conf httpd-ssl.conf proxy-html.conf
StartServers 3 :# 启动的子进程的个数
MinSpareThreads 75 :# 最小空闲线程数
MaxSpareThreads 250 : # 最大空闲线程数
ThreadsPerChild 25 :# 每个子进程可生成的线程数
MaxRequestWorkers 400 :# 最大数量的工作线程数
MaxConnectionsPerChild0 :# 每个子进程能够处理的最大连接数,0表示不限定;
# ps -elFH | grep httpd
1 S root 1604 1080 0 - 19241 poll_s2380 0 10:21 ? 00:00:01 /usr/local/apache/bin/httpd
5 S daemon 16061604080 0 - 105306 pipe_w 2244 0 10:21 ? 00:00:03 /usr/local/apache/bin/httpd
5 S daemon 16081604080 0 - 105306 pipe_w 2244 0 10:21 ? 00:00:03 /usr/local/apache/bin/httpd
5 S daemon 16091604080 0 - 105306 pipe_w 2248 0 10:21 ? 00:00:04 /usr/local/apache/bin/httpd
页:
[1]