Apache的 Event模式

无论是Worker模式或是Prefork 模式,Apache老是试图保持一些备用的(spare)或者是空闲的子进程(空闲的服务线程池)用于迎接即将到来的请求。这样客户端就不须要在获得服务前等候子进程的产生。服务器


event MPM 模式:并发

这个是Apache中最新的模式,在如今版本里的已是稳定可用的模式。它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题(某些线程由于被keep-alive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)。event MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又容许它释放。这样加强了高并发场景下的请求处理能力。高并发


Apache的httpd.conf中的配置方式:spa

<IfModule mpm_event_module>线程

    StartServers             3继承

    MinSpareThreads         75进程

    MaxSpareThreads        250内存

    ThreadsPerChild         25资源

    MaxRequestWorkers      400it

    MaxConnectionsPerChild   0

</IfModule>

tartServers:初始数量的服务器进程开始

 

# MinSpareThreads:  最小数量的工做线程,保存备用

 

# MaxSpareThreads:  最大数量的工做线程,保存备用

 

# ThreadsPerChild:  固定数量的工做线程在每一个服务器进程

 

# MaxRequestWorkers:  最大数量的工做线程

 

# MaxConnectionsPerChild:  最大链接数的一个服务器进程服务

对于KeepAlive连接,只有第一个请求会被计数。事实上,他改变了每一个子进程限制最大连接数量的行为(这个你们能理解吗??)。

工做方式:

每一个进程可以拥有的线程数量是固定的。服务器会根据负载状况增长或减小进程数量。一个单独的控制进程(父进程)负责子进程的建 立。每一个子进程可以创建 ThreadsPerChild数量的服务线程和一个监听线程,该监听线程监听接入请求并将其传递给服务线程处理和应答。Apache老是试图维持一个备 用(spare)或是空闲的服务线程池。这样,客户端无须等待新线程或新进程的创建便可获得处理。在Unix中,为了可以绑定80端口,父进程通常都是以 root身份启动,随后,Apache以较低权限的用户创建子进程和线程。User和Group指令用于配置Apache子进程的权限。虽然子进程必须对 其提供的内容拥有读权限,但应该尽量给予他较少的特权。另外,除非使用了suexec ,不然,这些指令配置的权限将被CGI脚本所继承。


硬限制:

ServerLimi和ThreadLimit这两个指令决定了活动子进程数量和每一个子进程中线程数量的硬限制。要想改变这个硬限制必须彻底中止服务器而后再启动服务器(直接重启是不行的)。

Apache在编译ServerLimit时内部有一个硬性的限制,您不能超越这个限制。

prefork MPM最大为"ServerLimit 200000"

其余MPM(包括work MPM)最大为"ServerLimit 20000

Apache在编译ThreadLimit时内部有一个硬性的限制,您不能超越这个限制。

mpm_winnt是"ThreadLimit 15000"

其余MPM(包括work prefork)为"ThreadLimit 20000


注意:

使用ServerLimit和ThreadLimit时要特别小心。假如将ServerLimit和ThreadLimit配置成一个高出实际须要许多的值,将会有过多的共享内存被分配。当配置成超过系统的处理能力,Apache可能没法启动,或系统将变得不稳定。

相关文章
相关标签/搜索