http之二: apache工作模式详解

作为web服务器,apache的主要作用就是接受并响应用户请求,显示给用户所访问的资源。那么当许多个用户同时来访问,apache该如何作出回应呢,mpm就是解决这个问题的。

一,MPM介绍

mpm(Multi Path Model),即多道处理模块,apache的核心,它有三种类型:preforkworkerevent,分别代表三种不同的响应方法。

1,prefork

        这是apache默认的工作模式,它事先启动很多进程,并接受用户请求的,在众多的进程中,有一个进程的属主组是root.root  其它的都是apache.apache,因为在linux中,启动1024以下的端口只有管理员才有权限,因此只有管理员才能启动80端口。

   
       这个进程并不负责响应用户请求,它专门负责创建空闲进程来响应请求,或者销毁多余的空闲进程。所以它是主导进程,称为 master process,其它的称为worker process

       它预先生成进程。一个请求用一个进程响应,好处是稳定可靠,一个进程崩溃了不会影响其它进程。但是性能差,一个用户一个进程,并发量的时候,资源消耗量很多,而且大量进程的切换,会影响响应时间。


2,worker


        基于线程,一个进程生成多个线程响应用户请求,只有一个进程。apache启动后,生成多个进程(此进程不是用来响应用户请求的),而是每个进程生成多个线程来响应用户请求,用一个线程来响应一个用户请求(是用线程来响应用户请求 的)

     由于多个线程共享同一个进程的资源,如果同一进程 下的线程曾经访问过一个页面并且打开过,第二个线程访问的时候不用再打开了,直接访问到了,这样看起来效率比较高,,但是 多个线程共享资源的时候,如果要写一个资源的话,会导致资源争用的,所以为了避免资源争用,必须要实现资源加锁,因此,如果不能良好的解决锁竞争的话,线程是不是比进程效率更高这很难说的清楚,尤其是linux不是原生态支持线程的,所以worker模型经测试发现,在linux上它还不如prefork模型性能好,这是就为什么默认使用perfork而不是worker模型的原因。


3event


    基于事件,一个进程处理多个用户请求,不是用线程来响应的,直接一个进程同时处理多个请求。nginx也是采用这种工作模式。


在apache配置文件中,一些关于perfork的指令:


minspareserver:  :最小空闲进程。

maxspareserver:最大空闲进程。

ServerLimit :为限定maxclients的值  //此值默认不在apache2.conf里,需要手动添加,默认为256

maxclients:最大值不能超过serverlimit的值

要想把maxclients值调更大,得先调serverlimit:,怎么调这个值:把服务停掉,把所有进程kill掉,再启动就可以了,而不是,把它值改掉,重启服务是不会生效的。

maxrequestsPerchild 4000 一个进程最多响应多少次请求,意思是说,一个进程响应完用户请求后,应该被杀死的,但是刚响应完,别一个用户的请求进来了,那它就接着响应,如此物质循环,最多响应4000

达到了4000,无论如何要把你kill掉,0表示不做限定。


worker:

startserver 2  开始启动2 个进程。

ThreadsPerChild  25:每个进程可以生成25个线程

关于event模式,它的配置指令和上面两个差不多,在apache中event几乎很少用到,所以就不详细解析了。


文章有错误的地方,还请各位大神多多指教,谢谢!





你可能感兴趣的:(http工作模式)