Apache-几种工作模式


135956557-小三IT自学群,任何IT问题都可以一起讨论,各种服务网络等等

-------------------------------------------------------------------------------
 Apache的优化配置
 Apache所运行的环境,硬件性能,等都是影响性能的因素,如果不能对硬件升级,最好就让Apache独立在单台主机,避免干扰.
相对来说CPU  内存  硬盘读取IO会是Apache性能瓶颈
 Apache工作模式
各种脚本都在conf/ extra中

apachectl -M 查看使用的所有模块
                    -V查看工作模式状态
-------------------------------------------------------------------------------------------------------------------
 1,prefork模式
mpm_prefork会预先创建多个进程,默认五个
每个进程只有一个线程,当收到客户端请求后,mpm_prefork模块会自动交给子进程处理,每个子进程同时只能处理一个请求.当请求过多,会继续创建新的进程,prefork不适合在高并发的场景,因为独立线程太占用资源,但是效率高,单个线程出现问题不会影响到其他.
prefork参数

<IfModule mpm_prefork_module>

StartServers             5
启动默认开启的子进程

MinSpareServers          5
最小闲置进程

MaxSpareServers         10
最大闲置进程 
serverlimit 20000
想增加大于256并发连接数,需要写这个

MaxRequestWorkers      250
最大并发链接,Apache2.3之前是maxclients

MaxConnectionsPerChild   0
每个子进程可处理的数量,到了以后自动销毁,0表示永不销毁
这个设置了可以释放一些资源,长期占用不怎么好看情况选择

</IfModule>
 注1:MaxRequestWorkers是这些指令中最为重要的一个,设定的是 Apache可以同时处理的请求,是对Apache性能影响最大的参数。如果请求总数已达到这个值(可通过ps -ef|grep http|wc -l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。虽然理论上这个值越大,可以处理的请求就越多,建议将初始值设为(以Mb为单位的最大物理内存/2),然后根据负载情况进行动态调整。比如一台4G内存的机器,那么初始值就是4000/2=2000。

注2:prefork 控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两 个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这种模式 可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个 值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为 MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。

注3:ServerLimit和MaxClients(MaxRequestWorkers)有什么区别呢?

是因为在apache1时代,控制最大进程数只有MaxClients这个参数,并且这个参数最大值为256,并且是写死了的,试图设置为超过256是无效的,这是由于apache1时代的服务器硬件限制的。但是apache2时代由于服务器硬件的升级,硬件已经不再是限制,所以使用ServerLimit这个参数来控制最大进程数,ServerLimit值>=MaxClient值才有效。ServerLimit要放在MaxClients之前,值要不小于MaxClients。
修改Apache的工作模式启用prefork 
 首先在hhtpd.conf文件中启用prefork模块然后在最下面写两行
 LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

Include conf/extra/httpd-mpm.conf
----------------------------------------------------------------
 2:worker模式
对比prefork,worker使用了多线程和多进程的混合模式,worker也会预先生成一些子进程,然后子进程生成线程 ,包括一个监听简称,请求会分配到其他线程上.会内存占用资源消耗会好一点,对高并发的场景有很好的表现,但是只要一个线程有问题  会影响通一个进程中的其他线程.
worker配置参数
 <IfModule mpm_worker_module>

StartServers             3
启动默认进程

MinSpareThreads         75
最小的工作线程

MaxSpareThreads        250
最大工作线程

ThreadsPerChild         25
每个进程生成的线程数

MaxRequestWorkers      400
并发量

MaxConnectionsPerChild   0
多少次后注销0表示永久

</IfModule>
 注1:Worker 由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样, 为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;

而MaxRequestWorkers 设置了同时连入的clients最大总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程

MinSpareThreads和 MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节 。

注2:ThreadsPerChild是worker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用 ThreadLimit指令,它的最大缺省值是20000。

注3:Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild 值决定的,应该大于等于MaxRequestWorkers。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时 也需要显式声明ServerLimit(系统配置的最大进程数量,最大值是20000)。需要注意的是,如果显式声明了ServerLimit,那么它乘以 ThreadsPerChild的值必须大于等于MaxRequestWorkers,而且MaxRequestWorkers必须是ThreadsPerChild的整数倍,否则 Apache将会自动调节到一个相应值。

注4:进程与线程的区别

线程是指进程内的一个执行单元,也是进程内的可调度实体.

与进程的区别:

(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;

(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源

(3)线程是处理器调度的基本单位,但进程不是.

(4)二者均可并发执行.

进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。

进程和线程的区别在于:

简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

线程的划分尺度小于进程,使得多线程程序的并发性高。

另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 
启动worker模式只需要更改最后两行为worker然后启动worker模块
---------------------------------------------------------------------------- 
event模式
Apache最新的工作室模式,是worker模式的变种,服务进程从连接中分离,解决了worker  keep-alive长连接占用线程资源的问题,但是不能很好地支持https的访问
apache参数
 1)KeepAlive On/Off

  KeepAlive指的是保持连接活跃,换一句话说,如果将KeepAlive设置为On,那么来自同一客户端的请求就不需要再一次连接,避免每次请求都要新建一个连接而加重服务器的负担。一般情况下,图片较多的网站应该把KeepAlive设为On。

2)KeepAliveTimeOut number

  如果第二次请求和第一次请求之间超过KeepAliveTimeOut的时间的话,第一次连接就会中断,再新建第二个连接。它的设置一般考虑图片或者JS等文件两次请求间隔,一般设置为3-5秒。

3)MaxKeepAliveRequests 100

  一次连接可以进行的HTTP请求的最大请求次数。将其值设为0将支持在一次连接内进行无限次的传输请求。事实上没有客户程序在一次连接中请求太多的页面,通常达不到这个上限就完成连接了。

4)HostnameLookups on|off|double

如果是使用on,那么只有进行一次反查,如果用double,那么进行反查之后还要进行一次正向解析,只有两次的结果互相符合才行,而off就是不进行域名验证。

如果为了安全,建议使用double;为了加快访问速度,建议使用off。

域名查找开启这个会增加apache的负担, 减慢访问速度建议关闭

5)timeout 5

推荐5 这个是 apache接受请求或者发出相应的时间超过这个时间 断开

注:以上配置项可在/usr/local/http-2.4.23/conf/extra/httpd-default.conf设置并在httpd.conf文件中通过include选项引用

MPM这个比较关键是影响并发效率的主要因素

1)StartServers        10

  设置服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所以一般没有必要调整这个参数。

2)MinSpareServers     10

  设置空闲子进程的最小数量。所谓空闲子进程是指没有正在处理请求的子进程。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。只有在非常繁忙机器上才需要调整这个参数。将此参数设的太大通常是一个坏主意。

3)MaxSpareThreads     75

  设置空闲子进程的最大数量。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。只有在非常繁忙机器上才需要调整这个参数。将此参数设的太大通常是一个坏主意。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成”MinSpareServers+1″。

4)ServerLimit       2000

  服务器允许配置的进程数上限。只有在你需要将MaxClients设置成高于默认值256的时候才需要使用。要将此指令的值保持和MaxClients一样。修改此指令的值必须完全停止服务后再启动才能生效,以restart方式重启动将不会生效。

5)MaxClients/ MaxRequestWorkers         256

  用于客户端请求的最大请求数量(最大子进程数),任何超过MaxClients限制的请求都将进入等候队列。默认值是256,如果要提高这个值必须同时提高ServerLimit的值。建议将初始值设为(以Mb为单位的最大物理内存/2),然后根据负载情况进行动态调整。比如一台4G内存的机器,那么初始值就是4000/2=2000。

6)MaxRequestsPerChild / MaxConnectionsPerChild  0

  设置的是每个子进程可处理的请求数。每个子进程在处理了“MaxRequestsPerChild”个请求后将自动销毁。0意味着无限,即子进程永不销毁。内存较大的服务器可以设置为0或较大的数字。内存较小的服务器不妨设置成30、50、100。所以一般情况下,如果你发现服务器的内存直线上升,建议修改该参数试试。

注:以上配置项可在/usr/local/http-2.4.23/conf/extra/httpd-mpm.conf设置并在httpd.conf文件中通过include选项引用

时间: 2024-11-05 17:22:46

Apache-几种工作模式的相关文章

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

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

Apache三种工作模式

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

Apache 两种工作模式 :prefork 、 worker

前言 1·最近这几篇文章都在讲Apache的一些安全与优化,这些针对服务器都是很重要的,掌握这些不仅提升了服务器的安全,还让服务器的性能大大的提高.这样就可以让客户有很好的体验感.2·今天这篇文章依旧是讲Apache.但是,是讲Apache的优化深入.Apache 的默认配置保证基本运行服务,但是在实际生产环境中,有时候需要把服务器性能发挥到最大化. Apache的两种工作模式:(prefork.worker) 很多朋友都知道Apache是当下Web服务器用得最广泛也是最稳定的开源软件之一,其中

Apache三种工作模式及目录属性讲解

Apache工作模式介绍 1.Apache作为现今web服务器用的最广泛也是最稳定的开源服务器软件2.其工作模式有许多种,源码包安装httpd时可查看httpd-mpm.conf文件,该文件位于extra/conf目录中3.目前主要有两种模式:event模式:一个进程中包含多个线程prefork模式:一个进程中包含一个线程worker模式:一个进程中包含多个线程 event工作模式介绍: 1.event是Apache最新的工作模式,它和worker模式很像,不同的是在于它解决了keep-aliv

详解Apache三种工作模式及目录属性

Apache工作模式介绍 1.Apache作为现今web服务器用的最广泛也是最稳定的开源服务器软件 2.其工作模式有许多种,源码包安装httpd时可查看httpd-mpm.conf文件,该文件位于extra/conf目录中 3.目前主要有两种模式: event模式:一个进程中包含多个线程 prefork模式:一个进程中包含一个线程 worker模式:一个进程中包含多个线程 event工作模式介绍 1.event是Apache最新的工作模式,它和worker模式很像,不同的是在于它解决了keep-

apache 三种工作模式的讲解

Apache 2.X  支持插入式并行处理模块,称为多路处理模块(MPM).在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择,它们会影响到apache的速度和可伸缩性. Prefork MPM : 这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程兼容性问题的系统.它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求.

Apache 三种工作模式介绍

三种MPM介绍                                                                              Apache 2.X  支持插入式并行处理模块,称为多路处理模块(MPM).在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择,它们会影响到apache的速度和可伸缩性. Prefork MPM : 这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似

apache几种工作模式对比

 apache2主要的优势就是对多处理器的支持更好,在编译时同过使用--with-mpm选项来决定apache2的工作模式.如果知道当前的apache2使用什么工作机制,可以通过httpd -l命令列出apache的所有模块,就可以知道其工作方式: prefork:如果httpd -l列出prefork.c,则需要对下面的段进行配置: <IfModule prefork.c> StartServers 5 #启动apache时启动的httpd进程个数. MinSpareServers 5

apache两种工作模式详解

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

Centos7之Apache的三种工作模式

Apache工作模式简介 Apache 2.X 支持插入式并行处理模块,称为多进程处理模块(MPM).在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择,它们会影响到apache的速度和可伸缩性. Apache的三种工作模式 1.prefork模式 prefork是一个非线程型的.预派生的MPM,使用多个进程,每个进程在某个确定的时间只单独处理一个连接,效率高,但内存使用比较大. 优点: 适合于没有线程安全库,需要避免线程兼容性问题的系统.它是要求将每