Apache 两种工作模式 :prefork 、 worker

前言


1·最近这几篇文章都在讲Apache的一些安全与优化,这些针对服务器都是很重要的,掌握这些不仅提升了服务器的安全,还让服务器的性能大大的提高。这样就可以让客户有很好的体验感。
2·今天这篇文章依旧是讲Apache。但是,是讲Apache的优化深入。Apache 的默认配置保证基本运行服务,但是在实际生产环境中,有时候需要把服务器性能发挥到最大化。


Apache的两种工作模式:(prefork、worker)

很多朋友都知道Apache是当下Web服务器用得最广泛也是最稳定的开源软件之一,其中工作模式有很多种,最主要使用的两种工作模式是:prefork模式、worker模式。下面会分别介绍这两种模式。


Prefork 工作模式:

1·首先我们需要知道什么是prefork 工作模式,其次需要知道这种工作模式的优点、缺点,最后我们需要会配置prefork 工作模式。这样在生产环境种才会有利于我们灵活的根据自身需求的应用!
2·prefork 工作模式实现了一个非线程型的、预派发的Web服务器,它是要求将每个请求互相独立的情况下最好的MPM(多路处理模块)。每个进程在某个确定的时间只单独处理一个请求。
3·prefork 模式由一个单独的控制进程(父进程) 负责产生子进程,子进程用于监听请求并作出应答,所以会一直存在空闲的子进程用于响应新的请求,这样可加快响应速度。


prefork 的优点、缺点:

优点:
1·具有很强的自我调节能力,工作效率高,只需要很少的配置指令调整;
2·最重要的是MaxClients 的值可以是一个足够大的数值以便处理潜在的请求高峰;
3·适合于没有线程安全库,需要避免线程兼容性问题的系统;
4·对线程调试困难的平台更容易调试一些。
缺点:
1·MaxClients 的值不能太大,以免需要使用的内存超出物理内存的大小;
2·因为它会常备用空闲的子进程用于响应新的请求,所以会占用更多的内存;


prefork 配置方式:

1· 首先需要知道你Apache是否指定了工作模式
cd /usr/local/httpd/bin
./httpd -l (在bin目录下执行此命令可以查看当前的工作模式)
2·如果没有指定工作模式就需要在apache配置时加入参数
./configure --with-mpm=prefork
3·在主配置文件中打开MPM(多路处理模块)路径:
vim /etc/httpd.conf
Include conf/extra/httpd-mpm.conf (去掉注释即可)
4·修改prefork工作模块参数
vim /usr/local/httpd/conf/extra/httpd-mpm.conf
修改的值稍微调整,实际情况需要根据自身需求,内容如下:
<IfModule mpm_prefork_module> (prefork 模块)
StartServers 10
MinSpareServers 10
MaxSpareServers 30
MaxRequestWorkers 1000
MaxConnectionsPerChild 5000
</IfModule>


prefork 配置参数表:

参数 说明
StartServers 启动时创建的进程数量
MinSpareServers 最少空闲进程
MaxSpareServers 最多空闲进程
MaxRequestWorkers 最多创建多少个子进程来处理请求
MaxConnectionsPerChild 每个进程处理的最大请求数,如果达到请求数,进程即被销毁,如果设置0,子进程永远不会结束

Worker 工作模式:

1·Worker 模式使 Web 服务器支持混合的多线程多进程。
2·Worker 模块每个进程能够拥有的线程数量使固定的,服务器会根据负载情况增加或减少进程数量
3·一个单独的控制进程(父进程)负载子进程的建立,而每个子进程能够建立一定数量的服务现场和一个监听线程,监听接入请求并将其传递给服务线程处理和应答


Worker 的优点、缺点:

优点:
1·由于使用线程来处理请求,所以可以处理很多请求;
2·系统资源的开销小于基于进程的MPM;
3·它使用了多进程,每个进程有多个线程,以获得基于进程的 MPM 的稳定;
4·线程比起进程会更轻量,因为线程是通过共享父进程的内存空间,因此,内存的占用会减少一些
缺点:
1·如果一个线程出现了问题也会导致同一进程下的线程出现问题;
2·由于用到多进程多线程,需要考虑到线程的安全了,在使用keep-alive长连接的时候,某个线程会一直被占用,即使中间没有请求,需要等待到超时才会被释放(该问题在prefork模式下也存在)。




Worker 的配置方式:

1· 首先需要知道你Apache是否指定了工作模式
cd /usr/local/httpd/bin
./httpd -l (在bin目录下执行此命令可以查看当前的工作模式)
2·如果没有指定工作模式就需要在apache配置时加入参数
./configure --with-mpm=worker
3·在主配置文件中打开MPM(多路处理模块)路径:
vim /etc/httpd.conf
Include conf/extra/httpd-mpm.conf (去掉注释即可)
4·修改worker工作模块参数
vim /usr/local/httpd/conf/extra/httpd-mpm.conf
修改的值稍微调整,实际情况需要根据自身需求,内容如下:
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>


worker 配置参数表:

参数 说明
StartServers 服务器启动时建立的子进程数
MinSpareThreads 最少空闲进程
MaxSpareThreads 最多空闲进程
ThreadsPerChild 每个子进程常驻执行线程数
MaxConnectionsPerChild 每个进程处理的最大请求数,如果达到请求数,进程即被销毁,如果设置0,子进程永远不会结束
MaxRequestWorkers 限定服务器同一时间内客户端最大接入的请求数量

总结:

1· prefork 模式使用多个子进程,每个子进程只有一个线程。每个进程在一个确定的时间只能维持一个链接。但是它的内存占用比较多,可是也更容易调试!
2· worker 模式使用多个子进程,每个子进程有多个线程。每个线程在一个确定的时间只能维持一个链接。它的内存使用比prefork要低得多。


归纳:

总的来说,prefork 方式速度稍高于 worker ,然而它需要得 CPU 和内存资源也比 worker 多!实际应用中更推荐 prefork 得方式。

原文地址:http://blog.51cto.com/13746824/2157697

时间: 2024-10-14 02:07:02

Apache 两种工作模式 :prefork 、 worker的相关文章

apache常用的两种工作模式 prefork和worker

apache作为现今web服务器用的最广泛也是最稳定的开源服务器软件,其工作模式有许多中,目前主要有两种模式:prefork模式和worker模式 一.两种模式 prefork模式: prefork是Unix平台上的默认(缺省)MPM,使用多个子进程,每个子进程只有一个线程.每个进程在某个确定的时间只能维持一个连接,效率高,但内存占用量比较大. 这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程兼容性

apache两种工作模式详解

prefork模式 这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程兼容性问题的系统.它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求. 这个MPM具有很强的自我调节能力,只需要很少的配置指令调整.最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小. worker模式 此多路处理模

关于Apache的两种工作模式prefork和worker

prefork模式 这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程兼容性问题的系统.它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求. 这个MPM具有很强的自我调节能力,只需要很少的配置指令调整.最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小. worker模式 此多路处理模

Apache两种工作模式切换

1. apache的安装 : .tar.gz包解压即可 2. 查看版本 :  httpd -l 3. 切换两种工作模式 apache的两种工作模式: prefork和worker模式 apache默认安装的为prefork模式,prefork的稳定性和兼容性比较好,worker的伸缩线比较好. 模式切换: 进入/usr/sbin目录 cd /usr/sbin 将当前的prefork模式启动文件改名 mv httpd httpd.prefork 将worker模式的启动文件改名 mv httpd.

Apache三种工作模式介绍与配置

Apache三种工作模式介绍与配置 一.Apache的三种工作模式介绍及相关查看方法 1.Apache三种工作模式简介 Apache目前一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式.它们分别是prefork,worker和event,它们同时也代表这Apache的演变和发展. Apache在configure配置编译参数的时候,可以使用 --with-mpm=prefork|worker|event 来指定编译为那一种MPM,当然也可以用编译为三种

ftp的两种工作模式

注:①ftp监听两个端口:控制端口21 和数据端口20 ②两种工作模式为:主动模式  和被动模式 主动模式: 客户端要去连接ftp服务端,首先客户端会随机打开一个大于1024的端口,去连接ftp服务端的21号控制端口,这个过程需要三次握手(略过),连接后客户端便可以在服务端执行一些命令,如:查询,上传,下载等 当客户端与服务端之间产生数据传输的时候,客户端会告诉服务端采用哪种模式,如主动模式(active),这时ftp服务端就会通过自己的20号数据端口去连接客户端的另一个随机端口,这个过程需要三

Apache常用2种工作模式prefork和worker比较

Apache两种常用工作模式:prefork和worker. prefork MPM prefork是一个非线程型的.预派生的MPM,使用多个进程,每个进程在某个确定的时间只单独处理一个连接,效率高,但内存使用比较大. 可通过了解prefork的配置认识prefork,配置位置:apache/conf/extra/httpd-mpm.conf <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServe

0548-apache两种工作模式介绍及配置优化

apache常用工作模式有两种,区别?worker模式:1.线程模式 2.占用资源少 3.稳定性略差 4.并发大prefork模式:1.进程模式 2.占用资源多 3.稳定 4.并发一般apache默认是prefork,编译时候一般选择worker模式.如果编译时候不指定worker模式,那么就是默认的prefork模式 已经确定了worker模式,如何调优呢?[[email protected] blog]# cd /application/apache/conf/[[email protect

Apache三种工作模式

Apache的三种工作模式分别是:prefork.worker.event. 1. prefork模式(默认模式) profork模式实现了一种非线程.预派生的Web服务器,用的是进程去处理请求,所以比较容易消耗内存,但是稳定性好,某个进程出现问题不会影响到其他请求. 2. worker模式 worker模式使用多个子进程,每个子进程有多个线程.由于使用的是线程去处理请求,消耗内存小,适合高流量的请求,但是如果某个进程出现问题,那么这个进程下的线程都会出现问题,即稳定性不是很好. 3. even