Centos7之Apache的三种工做模式

Apache工做模式简介

Apache 2.X 支持插入式并行处理模块,称为多进程处理模块(MPM)。在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不一样的MPM可供选择,它们会影响到apache的速度和可伸缩性。apache

Apache的三种工做模式

一、prefork模式

prefork是一个非线程型的、预派生的MPM,使用多个进程,每一个进程在某个肯定的时间只单独处理一个链接,效率高,但内存使用比较大。
Centos7之Apache的三种工做模式安全

优势:

适合于没有线程安全库,须要避免线程兼容性问题的系统。它是要求将每一个请求相互独立的状况下最好的MPM,这样若一个请求出现问题就不会影响到其余请求。服务器

缺点:

一个进程相对占用更多的系统资源,消耗更多的内存。并且,它并不擅长处理高并发请求,在这种场景下,它会将请求放进队列中,一直等到有可用进程,请求才会被处理。网络

二、worker模式

worker使用了多进程和多线程的混合模式,worker模式也一样会先预派生一些子进程,而后每一个子进程建立一些线程,同时包括一个监听线程,每一个请求过来会被分配到一个线程来服务。
Centos7之Apache的三种工做模式多线程

优势:

线程比起进程会更轻量,由于线程是经过共享父进程的内存空间,所以,内存的占用会减小一些,在高并发,高流量的场景下会比prefork有更多可用的线程,表现会更优秀一些。并发

缺点:

若是一个线程出现了问题也会致使同一进程下的线程出现问题,若是是多个线程出现问题,也只是影响Apache的一部分,而不是所有。因为用到多进程多线程,须要考虑到线程的安全了,在使用keep-alive长链接的时候,某个线程会一直被占用,即便中间没有请求,须要等待到超时才会被释放(prefork模式也有这个问题)。ide

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

三、Event模式

Apache最新的工做模式,它和worker模式很像。
Centos7之Apache的三种工做模式优化

优势:

不一样的是在于它解决了keep-alive长链接的时候占用线程资源被浪费的问题(HTTP的Keepalive方式能减小TCP链接数量和网络负载),在event工做模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,执行完毕后,又容许它释放。这加强了在高并发场景下的请求处理网站

缺点:

event MPM在遇到某些不兼容的模块时,会失效,将会回退到worker模式,一个工做线程处理一个请求。官方自带的模块,所有是支持event MPM的。注意一点,event MPM须要Linux系统(Linux 2.6+)对EPoll的支持,才能启用。

注:HTTPS的链接(SSL),它的运行模式仍然是相似worker的方式,线程会被一直占用,知道链接关闭。部分比较老的资料里,说event MPM不支持SSL,那个说法是几年前的说法,如今已经支持了。

Apache三种工做模式的使用

一、使用yum或者rpm安装httpd

注:默认使用的是prefork工做模式。

vi /etc/httpd/conf.modules.d/00-mpm.conf
Centos7之Apache的三种工做模式
注:Centos7修改apache工做模式,直接将前边注释去掉便可,切记将不用的也要注释掉!

二、源码安装httpd

两种编译方式指定参数

方式一:

指定具体工做模式--with-mpm=prefork/worker/event

注:真实环境指定后边其中一种便可!

方式二:

指定同时支持三种工做模式--enable-mpms-shared=all

注:建议使用这种,防止后期根据业务优化网站减小麻烦!

相关文章
相关标签/搜索