Apache-httpd工作模型

httpd

  httpd是由apache软件基金会开发的一款著名的web服务器软件。由于其开放源代码,并且拥有跨平台、功能强大、安全稳定等特性,而被广泛使用。早期httpd是在修修补补的基础上成长起来的,所以早期也叫作a pachey server,由于开发httpd的组织叫作apache,因此httpd也被称作apache。httpd有三个长线维护版本,分别是httpd2.0、httpd2.2和httpd2.4。使用最为广泛的还是2.2和2.4的版本,虽然两个版本看起来数字相差不大,但是这两个版本改变还是挺大。
  httpd支持许多特性,大部分特性都是通过编译模块实现,因此httpd是以核心加模块组成的方式工作。httpd的模块分两种,一种叫作动态可装载模块(DSO),另一种叫作多道处理模块(MPM)。DSO动态可装模块每个模块对应httpd的某项功能,也就是我们广泛意义上理解的功能模块。但是,MPM多道处理模块和DSO不一样,它并不是指一种模块,它代表的是httpd的一种工作特性,常用的MPM有,prefork、worker、event。

h1.png

httpd的三种MPM模式

1、Prefork

  prefork模式可以算是很古老但是非常稳定的Apache模式。Apache在启动之初,就预先fork一些子进程,然后等待请求进来。之所以这样做,是为了减少频繁创建和销毁进程的开销。每个子进程只有一个线程,在一个时间点内,只能处理一个请求。

h2.jpg

  • 优点:成熟稳定,兼容所有新老模块。同时,不需要担心线程安全的问题。

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

prefork各参数说明:

h3.png

2、Worker

  和prefork模式相比,worker使用了多进程和多线程的混合模式,worker模式也同样会先预派生一些子进程,然后每个子进程创建一些线程,同时包括一个监听线程,每个请求过来会被分配到一个线程来服务。线程比起进程会更轻量,因为线程是通过共享父进程的内存空间,因此,内存的占用会减少一些,在高并发的场景下会比prefork有更多可用的线程,表现会更优秀一些。

h4.jpg

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

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

worker各参数说明:

h5.png

3、Event

  这是Apache最新的工作模式,它和worker模式很像,不同的是在于它解决了keep-alive长连接的时候占用线程资源被浪费的问题,在event工作模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,执行完毕后,又允许它释放。这增强了在高并发场景下的请求处理。

h6.jpg

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

event参数说明:

h7.png

结语:httpd的MPM模块通常用来应对各种生产环境的情况,在生产环境中web服务器的访问量并不是一成不变的,所以有的时候我们可能需要修改相关参数来应对各种访问量。

 

原创文章,作者:641348038@qq.com,如若转载,请注明出处:http://www.178linux.com/68083

(0)
641348038@qq.com641348038@qq.com
上一篇 2017-02-15
下一篇 2017-02-15

相关推荐

  • 机器学习排序

     从使用的数据类型,以及相关的机器学习技术的观点来看,互联网搜索经历了三代的发展历程。        第一代技术,将互联网网页看作文本,主要采用传统信息检索的方法。        第二代技术,利用互联网的超文本结构,有效…

    Linux干货 2015-12-15
  • 如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果

    命令别名使用alias命令; ~]#alias NAME='COMMAND' 在一个命令中引用另一个命令的执行结果也是bash的特性之一,引用。 方法:$(COMMAND)

    Linux干货 2016-11-06
  • RAID 0 软件实现

    RAID 0 软件实现        RAID 0又称为Stripe或Striping,它代表了所有RAID级别中最高的存储性能。RAID 0提高存储性能的原理是把连续的数据分散到多个磁盘上存取,这样,系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。这种数据上的并行…

    Linux干货 2017-05-02
  • Linux网络管理之网络配置管理和子网划分

    配置网卡信息 获取网卡的信息 dmesg | grep -i eth 获取网卡芯片信息 lspci | grep -i eth 查询IP信息 ifconfig显示IP信息    -a:显示包括未激活状态的网卡信息 重启网卡服务(每次配置完ip需要手动重启此服务) CentOS6: servcie network restart CentO…

    Linux干货 2016-09-07
  • rpm&yum

    软件包管理 软件运行环境 软件包基础 Rpm包管理 Yum管理 定制yum仓库 编译安装 ABI 应用程序的二进制接口,和操作系统相关,一个程序二进制编好了,想要在你的系统上跑,要符合你的操作系统的接口标准Windows:PE  linux:ELF WINDOWS和LINUX二进制程序是不兼容的 库级别的虚拟化 Linux:WINE 可以让Windows程序…

    Linux干货 2018-01-02
  • python装饰器1

    简单介绍装饰器(注意格式)

    Linux干货 2017-10-22

评论列表(1条)

  • luoweiro
    luoweiro 2017-02-22 22:49

    对于apache工作模型介绍的非常详细,尤其是配置方面的知识,非常赞。