Apache多路处理模块---MPM

apache通过不同的MPM运行在多进程和多线程混合模式下,增强配置扩充性能。MPM无法模块化,只能在编译配置时选择,被静态编译到服务器中。目前apache版本中一个服务器只能选择一个MPM,在UNIX/Linux平台中可以选择使用prefork(默认)与worker多路处理模块,而windows平台上只能使用mpm_winnt模块。

配置编译参数,如:

# ./configure --with-mpm=perfork
# make
# make install

查看当前系统使用的是哪一个MPM: # ./httpd -l

1)perfork模块

perfork模块是一个非线程型与预派生的模块,通过预先派生一定数量的子进程来等待客户请求。

参数说明:

ServerLimit
//默认的MaxClient最大是256个线程,假如想配置更大的值,就的加上ServerLimit这个参数。20000是ServerLimit这个参数的最大值。假如需要更大,则必须编译apache,此前都是无需重新编译Apache。生效前提:必须放在其他指令的前面

StartServers
//指定服务器启动时建立的子进程数量,prefork默认为5。

MinSpareServers
//指定空闲子进程的最小数量,默认为5。假如当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。此参数不要设的太大。

MaxSpareServers
//配置空闲子进程的最大数量,默认为10。假如当前有超过MaxSpareServers数量 的空闲子进程,那么父进程将杀死多余的子进程。此参数不要 设的太大。假如您将该指令的值配置为比MinSpareServers小,Apache将会自动将其修改成"MinSpareServers+1"。

MaxClients
//限定同一时间客户端最大接入请求的数量(单个进程并发线程数),默认为256。任何超过MaxClients限制的请求都将进入等候队列,一旦一个链接被释放,队列中的请求将得到服务。要增大这个值,您必须同时增大ServerLimit 。

MaxRequestsPerChild
//每个子进程在其生存期内允许伺服的最大请求数量,默认为10000.到达MaxRequestsPerChild的限制后,子进程将会结束。假如MaxRequestsPerChild为"0",子进程将永远不会结束。将MaxRequestsPerChild配置成非零值的两个好处:1、防止内存泄露无限进行,从而耗尽内存;2、给进程一个有限寿命,从而有助于当服务器负载减轻时减少活动进程的数量。

一个单独的控制进程(父进程)负责产生子进程,这些子进程用于监听请求并作出应答。Apache总是试图保持一些备用的 (spare)或是空闲的子进程用于迎接即将到来的请求。这样客户端就无需在得到服务前等候子进程的产生。prefork MPM使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接,在大多数平台上,prefork MPM在效率上要比worker MPM要高,但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势:它能够使用那些没有处理好线程安全的第三方模块,并且对于那些线程调试困难的平台而言,他也更容易调试一些。

2)worker模块

worker模块是apache2.0以后新增加的而一个多路处理模块,与可以使用混合的多线程多进程,处理能力比传统的prefork更强大,对系统资源的需求更小,它使用多个进程,并在每个进程下面派生线程来服务请求,稳定性比纯粹使用线程的服务器更稳定。

参数说明:

ServerLimit
//服务器允许配置的进程数上限。值必须大于等于MaxClients/ThreadsPerChild。这个指令和ThreadLimit结合使用配置了MaxClients最大允许配置的数值。任何在重启期间对这个指令的改变都将被忽略,但对MaxClients的修改却会生效。

ThreadLimit
//每个子进程可配置的线程数上限。这个指令配置了每个子进程可配置的线程数ThreadsPerChild上限。该值应该跟ThreadsPerChild可能达到的最大值保持一致,ThreadLimit >= ThreadsPerChild。任何在重启期间对这个指令的改变都将被忽略,但对ThreadsPerChild的修改却会生效。

StartServers
//服务器启动时建立的子进程数。

MinSpareThreads
//最小空闲线程数(单个子进程), 这个MPM将基于整个服务器监控空闲线程数。假如服务器中总的空闲线程数太少,子进程将产生新的空闲线程。

MaxSpareThreads
//配置最大空闲线程数(单个子进程)。默认值是"250"。这个MPM将基于整个服务器监控空闲线程数。假如服 务器中总的空闲线程数太多,子进程将杀死多余的空闲线程。MaxSpareThreads的取值范围是有限制的。Apache将按照如下限制自动修正您配置

MaxClients
//允许同时伺服的最大接入请求数量(最大线程数量)。任何超过MaxClients限制的请求都将进入等候 队列。因此要增加MaxClients的时候,您必须同时增加 ServerLimit的值。计算公式:MaxClients<=ServerLimit *ThreadsPerChild,将初始值设为(以Mb为单位的最大物理内存/2),然后根据负载情况进行动态调整。比如一台4G内存的机器,那么初始值就是4000/2=2000 

ThreadsPerChild
//每个子进程建立的常驻的执行线程数,子进程在启动时建立这些线程后就不再建立新的线程了。

MaxRequestsPerChild
//配置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。假如MaxRequestsPerChild为"0",子进程将永远不会结束。将MaxRequestsPerChild配置成非零值有两个好处:1.能够防止(偶然的)内存泄漏无限进行,从而耗尽内存。2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。

公式:
ThreadLimit >= ThreadsPerChild
MaxClients = MinSpareThreads+ThreadsPerChild

硬限制:
ServerLimi和ThreadLimit这两个指令决定了活动子进程数量和每个子进程中线程数量的硬限制。要想改变这个硬限制必须完全停止服务器然后再启动服务器(直接重启是不行的)。Apache在编译ServerLimit时内部有一个硬性的限制,您不能超越这个限制。prefork MPM最大为"ServerLimit 200000",其他MPM(包括work MPM)最大为"ServerLimit 20000。Apache在编译ThreadLimit时内部有一个硬性的限制,您不能超越这个限制。mpm_winnt是"ThreadLimit 15000";其他MPM(包括work prefork)为"ThreadLimit 20000

注意:
使用ServerLimit和ThreadLimit时要特别当心。假如将ServerLimit和ThreadLimit配置成一个高出实际需要许多的值,将会有过多的共享内存被分配。当配置成超过系统的处理能力,Apache可能无法启动,或系统将变得不稳定。

3)模式切换(从profrok工作模式切换到worker工作模式)

1> 进入/usr/sbin目录:cd /usr/sbin
2> 将当前的prefork模式启动文件改名:mv httpd httpd.prefork
3> 将worker模式的启动文件改名:mv httpd.worker httpd
4> 修改配置文件:vi /etc/httpd/conf/httpd.conf
5>找到或添加里边的如下一段,可适当修改负载等参数:

StartServers
ThreadLimit
ServerLimit
MaxClients
MinSpareThreads
MaxSpareThreads
ThreadsPerChild
MaxRequestsPerChild 

6> 重新启动服务:/etc/init.d/httpd restart 即可换成worker方式启动apache

4)apache所提供的性能调整常见指令

  • KeepAlive:通过on和off开关设置是否使用http持久连接。
  • MaxKeepAliveRequests:一个持久连接中允许的最大请求数量,默认是100.
  • KeepAliveTimeout:设置持久连接中服务器在两次请求之间等待的秒数,默认是5s。该值越大与空闲客户端保持连接的进程就越多。

5)Event MPM模块

最新的,还在试验阶段

Apache(Web)服务器性能调整的更多相关文章

  1. Web服务器性能压力测试工具http_load、webbench、ab、Siege使用教程

    Web服务器性能压力测试工具http_load.webbench.ab.Siege使用教程 作者: feng 日期: 2012/07/25 发表评论 (0) 查看评论   一.http_load 程序 ...

  2. 如何在Ubuntu 16.04上安装Apache Web服务器

    转载自:https://www.howtoing.com/how-to-install-the-apache-web-server-on-ubuntu-16-04 介绍 Apache HTTP服务器是 ...

  3. 如何在Ubuntu 18.04上安装Apache Web服务器

    一. apt库安装 1.在终端输入更新检查命令,sudo apt-get update 2. 在更新完成后(如果不想检查更新,也可直接输入此步)输入:sudo apt-get install apac ...

  4. Web服务器性能监控分析与优化

    Web服务器性能监控分析与优化 http://www.docin.com/p-759040698.html

  5. Web服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程 - VPS侦探

    Web服务器性能/压力测试工具http_load.webbench.ab.Siege使用教程 - VPS侦探 http://soft.vpser.net/test/http_load/http_loa ...

  6. Apache web服务器(LAMP架构)

    Apache web服务器(LAMP架构) apache介绍 1).世界上使用率最高的网站服务器,最高时可达70%:官方网站:apache.org 2).http 超文本协议 HTML 超文本标记语言 ...

  7. Web服务器性能/压力测试工具http_load、webbench、ab、Siege、loadrunner

    回头看看 Web服务器性能/压力测试工具http_load.webbench.ab.Siege.loadrunner

  8. 步骤详解安装Apache web服务器

    1.在上右键è安装 安装后apache web服务器自动启动. 在右下角出现. Apache安装之后有一个默认的网站目录 在浏览器上通过网站就可以访问到该目录下的文件. 2.测试 在浏览器输上请求lo ...

  9. Apache Web服务器 安装步骤 和遇到的坑

    Apache Web服务器是开发放源码的网页服务器,我们看到的网页都是上传到服务器然后呈现给用户的. 在开发中,在自己的电脑上安装Apache Web服务器,你的电脑也会成为服务器,配置文件,访问你的 ...

随机推荐

  1. .net学习之.net和C#关系、运行过程、数据类型、类型转换、值类型和引用类型、数组以及方法参数等

    1..net 和 C# 的关系.net 是一个平台,C#是种语言,C#语言可以通过.net平台来编写.部署.运行.net应用程序,C#通过.net平台开发.net应用程序2..net平台的重要组成FC ...

  2. PostGreSQL最简安装

    A.先用yum安装服务器和客户端 yum install postgresql yum install postgresql-server B.初始化数据库并启动服务 service postgres ...

  3. jquery 事件冒泡 解决 ie firefox 兼容性问题

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  4. jquery日期格式化

    function dateFormat(date, format){     date = , ) / ), ) {                 v = );             }      ...

  5. InputStream的三个read的区别

    转自:http://www.blogjava.net/toby/archive/2009/04/24/267413.html 1.read这个方法是对这个流一个一个字节的读,返回的int就是这个字节的 ...

  6. HDU 2819 — Swap 二分匹配

    Swap Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  7. JeeWx 微信管家平台

    .平台简介 Jeewx是一款开源.免费的微信管家系统(多触点管理平台),2014年荣获CSDN开发商大会第一名.采用JAVA语言,支持微信公众号.微信企业号.支付宝服务窗等多触点管理.Jeewx实现了 ...

  8. Linux基础命令(1)

    使用Ctr + Alt + F1(2,3,4,5,6)进入终端. 使用Ctr + Alt + F7回到界面. date 显示系统日期 cal 2015 显示2015年的日历表 reboot 重启 sh ...

  9. win7家庭版更改桌面图标

    电脑 Win7家庭普通版 方法/步骤   1 选择左下角开始. 2 在搜索栏中,输入“ico”,选择“显示或隐藏桌面上的通用图标”. 3 出现桌面图标设置,选择“更改图标”.

  10. ZOJ 3905 Cake ZOJ Monthly, October 2015 - C

    Cake Time Limit: 4 Seconds      Memory Limit: 65536 KB Alice and Bob like eating cake very much. One ...