httpd的三种模式比较

Oops! Oops!     2022-09-14     638

关键词:

查看你的httpd使用了哪种模式:

/usr/local/apache2/bin/httpd -V |grep ‘Server MPM‘

 

使用哪种模式,需要在编译的时候指定

--with-mpm=prefork|worker|event

 

当然也可以编译的时候,让三者都支持:

--enable-mpms-shared=all

 

然后在配置文件中,修改

LoadModule mpm_worker_module modules/mpd_mpm_worker.so

 

2.2版本默认为worker,2.4版本默认为event

 

再来比较一下三种模式的差异

 

1 prefork

prefork模式可以算是很古老但是非常稳定的Apache模式。Apache在启动之初,就预先fork一些子进程,然后等待请求进来。之所以这样做,是为了减少频繁创建和销毁进程的开销。每个子进程只有一个线程,在一个时间点内,只能处理一个请求。
优点:成熟稳定,兼容所有新老模块。同时,不需要担心线程安全的问题。(我们常用的mod_php,PHP的拓展不需要支持线程安全)
缺点:一个进程相对占用更多的系统资源,消耗更多的内存。而且,它并不擅长处理高并发请求,在这种场景下,它会将请求放进队列中,一直等到有可用进程,请求才会被处理。

技术分享

 

2 worker

worker模式比起上一个,是使用了多进程和多线程的混合模式。它也预先fork了几个子进程(数量比较少),然后每个子进程创建一些线程,同时包括一个监听线程。每个请求过来,会被分配到1个线程来服务。线程比起进程会更轻量,因为线程通常会共享父进程的内存空间,因此,内存的占用会减少一些。在高并发的场景下,因为比起prefork有更多的可用线程,表现会更优秀一些。
有些人会觉得奇怪,那么这里为什么不完全使用多线程呢,还要引入多进程?
原因主要是需要考虑稳定性,如果一个线程异常挂了,会导致父进程连同其他正常的子线程都挂了(它们都是同一个进程下的)。为了防止这场异常场景出现,就不能全部使用线程,使用多个进程再加多线程,如果某个线程出现异常,受影响的只是Apache的一部分服务,而不是整个服务。

优点:占据更少的内存,高并发下表现更优秀。

缺点:必须考虑线程安全的问题,因为多个子线程是共享父进程的内存地址的。如果使用keep-alive的长连接方式,某个线程会一直被占据,也许中间几乎没有请求,需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用。(该问题在prefork模式下,同样会发生)

注:keep-alive的长连接方式,是为了让下一次的socket通信复用之前创建的连接,从而,减少连接的创建和销毁的系统开销。保持连接,会让某个进程或者线程一直处于等待状态,即使没有数据过来。

技术分享

3  event

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

event MPM在遇到某些不兼容的模块时,会失效,将会回退到worker模式,一个工作线程处理一个请求。官方自带的模块,全部是支持event MPM的。

注意一点,event MPM需要Linux系统(Linux 2.6+)对EPoll的支持,才能启用。

还有,需要补充的是HTTPS的连接(SSL),它的运行模式仍然是类似worker的方式,线程会被一直占用,知道连接关闭。部分比较老的资料里,说event MPM不支持SSL,那个说法是几年前的说法,现在已经支持了。

技术分享





apache-httpd的三种模式

参考技术Aapachehttpd-2.4新增模块;mod_proxy_fcgi(可提供fcgi代理)mod_ratelimit(限制用户带宽)mod_request(请求模块,对请求做过滤)mod_remoteip(匹配客户端的IP地址)对于基于IP的访问控制做了修改,不再支持allow,deny,order机制,而是... 查看详情

关于vmware的三种网络模式

前言有学员对于VMware虚拟机的三种网络模式比较困惑,关于这三种网络模式在网上有很多的介绍,但要找到个好点的答案着实有点困难。所以我在这里汇总了三种模式的解释和思考,大家可以做参考。NAT模式桥接模式... 查看详情

http的三种工作模型

Apacheprefork模型:??预派生模式,有一个主控制进程,然后生成多个子进程,使用select模型,最大并发1024,每个子进程有一个独立的线程响应用户请求,相对比较占用内存,但是比较稳定,可以设置最大和最小进程数,是最古老... 查看详情

java单例模式的三种实现(线程安全)

直接上代码(代码注释比较完整):第一种:packagepattern.singleton.doublecheck;publicclassSingleton{  //私有化默认构造方法,防止外部生成此实例 privateSingleton(){}  //声明此单一实例 //volatile:能够及时通知其他线程... 查看详情

170728单例模式的三种水平代码

一、单例模型具备条件:1、私有的构造方法2、instance(单一实例,static)和getInstance(获取实例的方法,static)必须是static二、下面三种不同层次单例模型代码评价:第一种,通过测试发现,虚拟机加载类的时候单例就会被初始... 查看详情

虚拟机的三种网路模式

一、虚拟机的三种网路模式1.桥接模式2.NAT模式3.Host-Only模式 二、本文只介绍前两张模式在正式开始学习之前,需要理解一些概念: 查看详情

zookeeper的三种安装模式

zookeeper的安装分为三种模式:单机模式、集群模式和伪集群模式。1、单机模式首先,从Apache官网下载一个Zookeeper稳定版本,本次教程采用的是zookeeper-3.4.9版本。http://apache.fayea.com/zookeeper/zookeeper-3.4.9/然后解压zookeeper-3.4.9.tar.gz文... 查看详情

vmware虚拟机的三种网络模式

前言 bridge模式 NAT模式 host-only模式 *******************************参考***********************************vmware虚拟机三种网络模式详解 查看详情

app开发的三种模式

APP开发的三种模式:NativeApp、webApp、hybridApp1.原生app使用原生app(android或iOS)开发APP..技术:Native技术主要用于提供原生支持,要做到跨平台,就需要掌握部分Android和iOS的知识,除了多线程,文件存储等基础知识,Android需要非常熟... 查看详情

binlog的三种模式

binlog的三种模式statement模式特点:(1)此模式不支持RU,RC隔离级别;(2)binglog日志文件中上一个事物的结束点是下一个事物的开始点;(3)DML,DDL语句都会明文显示;(4)对一些系统函数不能准确复制或者不能复制,如load_fil... 查看详情

2.lvs的三种工作模式_nat模式

1.LVS的三种工作模式   1)VS/NAT模式(Networkaddresstranslation)  2)VS/TUN模式(tunneling)  3)DR模式(Directrouting)1.1.NAT模式-网络地址转换(VirtualServervia NetworkAddressTranslation)  这个是通过网络地址转换的方法来实现... 查看详情

1.4illustrator的三种屏幕模式

本节课将为您演示系统的三种屏幕模式,您可以根据工作需要,选择合适的屏幕模式。当前的屏幕模式为正常屏幕模式。点击工具箱最下方的[更改屏幕模式]按钮。在弹出的选项列表中,选择[带有菜单栏的全屏模式],将屏幕模... 查看详情

单例模式的三种写法

第一种,懒汉模式,没考虑线程安全publicclassSingleton{privatestaticSingleton_instance=null;privateSingleton(){}publicstaticSingletonCreateInstance(){if(_instance==null){_instance=newSingleton();}return_instance;}}第二种, 查看详情

vi编辑器的三种模式

  Vi编辑器的三种模式1)一般模式(光标移动、复制、粘贴、删除)2)编辑模式(编辑文本)3)命令行模式(查找和替换)ESC:返回键vi文件名查找字符串,使用/加上要查找的字符串,如:/abc输入/后,就进入命令行模... 查看详情

vmware下网络配置的三种模式

...录一网络配置中出现的错误及解决方案二VMware下网络配置的三种模式简介1、桥接模式(Bridged)2、网络地址转化模式(NAT)3、仅主机模式(host-only)网络配置中出现的错误及解决方案错误1:安装好虚拟机之后一切正常,等过了... 查看详情

java的三种代理模式

Java的三种代理模式1.代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编... 查看详情

hive的三种启动模式

hive的三种启动模式1.local模式,hive自带的有一个Derby数据库,非常简单只能有一个用户登录进去,一般只会在测试的时候用一下。2.单用户模式,将元数据存放到关系型数据库(常见的mysql,oracle,sqlserv... 查看详情

vmware的三种网络模式讲解

 vmware有三种网络设置模式,分别是Bridged(桥接),NAT(网络地址转换),Host-only(私有网络共享主机) 1.Bridged(桥接)桥接模式默认使用的是:VMnet0什么是桥接模式?桥接模式就是把主机网卡和虚拟机虚拟的网卡利用虚拟网桥进行... 查看详情