apache的工作模式(多进程工作模式)
使用httpd -V,Server MPM: prefork
检查默认的apache工作模式,默认是prefork
[root@chaogelinux ~]# httpd -V|grep -i "server mpm"
Server MPM: prefork
银行需要开门营业,银行需要有工作人员,去处理客户的问题
银行还得打开处理业务的窗口
1号窗口:窗口内的工作人员是干活的,解决客户问题
2号窗口:窗口内的工作人员是干活的,解决客户问题
银行(Linux操作系统,apache主程序)
客户的问题(Linux接收到的用户请求,用户通过浏览器发来的访问请求)
apache主程序再打开一个进程去处理用户的请求(开通一个窗口)
干活的其实是该进程创建的线程,线程就好比是干活的工作人员
1.prefork
是在apache,httpd服务刚启动的时候,就预先fork(启动)一些进程,并且这些进程等待用户的请求(如银行的窗口,等待客户来办理业务),这么做是为了减少频繁的创建和销毁进程,带来的额外的系统开销
该prefork模式是一个进程,只有一个线程,一个时间内,只能处理一个请求(一个窗口只有一个业务员,只能办理一个客户的问题)
优点:成熟稳定,兼容所有的apache模块,并且不用担心线程冲突的问题
缺点:多个进程占用了较多的系统资源,消耗了较多的内容,并且该模式,不适合高并发场景
(银行无论生意好坏,都得预先开通很多个窗口,造成了人员,场地的浪费,无法处理业务高峰期)
2.worker
使用了多进程和多线程的混合模式。它也预先fork了几个子进程(数量比较少),然后每个子进程创建一些线程,同时包括一个监听线程。每个请求过来,会分配给一个线程去处理。线程比起进程会更轻量,消耗的内存更少,因为线程通常会共享父进程的内存空间,因此,内存的占用会减少一些。在高并发的场景下,因为比起prefork有更多的可用线程,表现会更优秀一些。
(银行有多个窗口,窗口后面还有多个工作人员)
优点:占据更少的内存,高并发下表现更优秀。
缺点:必须考虑多线程资源抢夺问题,线程安全的问题。
3.event
它和worker模式很像,最大的区别在于,它解决了TCP的keep-alive场景下,长期被占用的线程的资源浪费问题(当请求来了之后,交给一个子线程去处理,如果该TCP长链接,长时间占用线程资源,对系统开销较大,event模式会默认开启一个监听线程,检测到当子线程处理完毕请求之后,会释放该线程,减轻服务器的压力)。event MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力。
HTTP采用keepalive方式减少TCP连接数量,但是由于需要与服务器线程或进程进行绑定,导致一个繁忙的服务器会消耗完所有的线程。Event MPM是解决这个问题的一种新模型,它把服务进程从连接中分离出来。在服务器处理速度很快,同时具有非常高的点击率时,可用的线程数量就是关键的资源限制,此时Event MPM方式是最有效的,但不能在HTTPS访问下工作。
网友评论