Apache所运行的硬件环境都是对性能影响最大的因素

各个硬件指标中,对性能影响最大的是内存,其次是硬盘的速度

●Apache的工作模式

1、prefork模式(一个 非线程型的)

⑴、主要工作方式:当Apache服务器启动后,mpm_prefork模块会预先创建多个子进程(默认为5个),每个子进程只有一个线程,当接收到客户端的请求后,mpm_prefork模块再将请求转交给子进程处理,并且每个子进程同时只能用于处理单个请求。如果当前的请求数将超过预先创建的子进程数时,mpm_prefork模块就会创建新的子进程来处理额外的请求。Apache总是试图保持一些备用的或者是空闲的子进程用于迎接即将到来的请求,这样客户端的请求就不需要在接收后等候子进程的产生。

⑵prefork在效率上要比worker要高,但是内存使用大多不擅长处理高并发的场景

⑶Apache在prefork工作模式下影响性能的重要参数说明:

#prefork MPM

<ifModule mpm_prefork_module>

StartServers    5        #Apache启动时默认开始的子进程数

MinSpareServers    5        #最小的闲置子进程数

MaxSpareServers    10        #最大的闲置子进程数,

MaxRequestWorkers    250        #MaxRequestWorkers设置了允许同时最大接入的请求数量,任何超过MaxRequestWorkers限制的请求将进入等候队列

MaxConnectionsPerChild    500        #设置的是每个子进程可处理的请求数。每个进程在处理了“MaxConnectionsPerChild”请求后将自动销毁。0意味着无限,即子进程永不销毁。设置为1时可防止意外的内存泄漏。设置为2时表示在服务器负载下降的时候会自动减少子进程数。可根据服务器的负载来调整此值

★注:

①MaxRequestWorkers是这些指令中最为重要的一个,设定的是Apache可以同时处理的请求,是对Apache性能影响最大的参数。如果请求总数已经达到这个值(通过ps -ef | grep http | wc -l来确认)那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而http访问却很慢的主要原因。虽然理论上这个值越大,可以处理的请求就越多,建议将初始值设为以MB为单位的最大物理内存/2,然后根据负载情况进行动态调整。

②prefork控制进程在最初建立“StartServers”子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个......如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止,这种模式可以不必再请求到来时再产生新的进程,从而减小了系统开销以增加性能。MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会kill掉一些多余的进程,这个值不要设的过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。

③ServerLimit和MaxClients(MaxRequestWorkers)的区别:在Apache时代,控制最大进程数只有MaxClients这个参数,并且这个参数最大值为256,并且是写死了的,试图设置为超过256是无效的,这是由于Apache1时代的服务器硬件是限制的。但是Apache2时代由于服务器硬件的升级,硬件已经不再是限制,所以ServerLimit这个参数来控制最大进程数,ServerLimit值>=MaxClient值才有效。ServerLimit要放在MaxClients之前,值不要小于Maxclients。

④查看Apache加载的模块:apachectl -t -D DUMP_MODULES 或 apachectl -M 或 apachectl -l

查看Apache的工作模式:httpd -v 或 httpd -l

⑤修改prefork参数和启动prefork模式

vi /usr/local/http-2.4.23/conf/extra/httpd-mpm.conf

vi /usr/local/http-2.4.23/conf/httpd.conf 添加两行:LoadModule mpm_prefork_module/mod_mpm_prefork.so 和 Include conf/extra/httpd-mpm.conf

重启httpd服务

2、Worker模式(多线程多进程)

⑴与prefork的比较:prefork速度要稍高于worker,然而它需要的CPU和memory资源也稍多于worker

⑵Apache在worker工作模式下影响性能的重要参数说明

#worker MPM

<ifModule mpm_worker_module>

StartServers    3        #Apache启动时默认开始的子进程数

MinSpareThreads    75        #最小空闲数量的工作进程

MaxSpareThreads    250        #最大空闲数量的工作线程

ThreadPerChild    25        #每个子进程产生的线程数量

MaxRequestWorkers    400        #MaxRequestWorkers设置了允许同时最大接入的请求数量,任何超过MaxRequestWorkers限制的请求将进入等候队列

MaxConnectionsPerChild    0        #设置的是每个子进程可处理的请求数。每个进程在处理了“MaxConnectionsPerChild”请求后将自动销毁。0意味着无限,即子进程永不销毁。

★注:

①Worker由主控制进程生成“StartServers”子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数。而MaxRequestWorkers设置了同时连入的clients最大总数,如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。MinSpareThreads和MaxSpareThreads的最大缺省值分别是75和250.这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节

② ThreadsPerChild是worker MPM 中与性能相关最密切的指令,ThreadsPerChild的最大缺省值是64,如果负载较大,64位也是不够的,这时要使用ThreadLimit指令,他的最大缺省值是20000

③Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxRequestWorkers。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也需要显示声明ServerLimit。需要注意的是,如果显示声明了ServerLimit,那么它乘以ThreadsPerChild的值必须大于等于MaxRequestWorkers,而且MaxRequestWorkers必须是ThreadsPerChild的整数倍,否则Apache将会自动调节到一个相应值。

④进程与线程的区别(线程是指进程内的一个执行单元,也是进程内的可调度实体)

a、地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间

b、资源拥有:进程是资源分配和拥有的单位,同一进程内的线程共享进程的资源

c、线程是处理器调度的基本单位,但进程不是

d、二者均可并发执行:进程和线程都是由操作 系统所体会的程序运行的基本单元, 系统利用该基本单元实现系统对应用的并发性

e、简单来说,就是一个程序至少有一个进程,一个进程至少有一个线程

线程的划分尺度小于进程,使得多线程程序的并发性高

进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率

3、Event模式

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

转载于:https://blog.51cto.com/cherryliang/1939982

Apache优化配置——工作模式相关推荐

  1. linux apache两种工作模式详解

    apache两种工作模式详解 刚接触这两个配置时很迷糊,全部开启或全部注释没有几多变化.今天搜索到这么一篇讲得还不错的文章,看了几篇,还是不能完全记住,做一个收藏. 空闲子进程:是指没有正在处理请求的 ...

  2. Apache之三种工作模式和配置性能优化

    1 Apache的3种模式和版本 Apache目前一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式,它们分别是prefork,worker和event. 我 ...

  3. Apache 优化配置10条建议

    之前VPS使用的是默认的Apache配置,感觉还行,不过随着博客的人流量上升,显然这种配置无法满足需求了:下面是Apache官方手册中给出的几条优化配置建议,笔者将其整理出来,对Apache服务器的运 ...

  4. Linux Apache 怎么修改工作模式

    Apache默认为prefork模式,主要是考虑到稳定性的原因. 要切换到worker模式,则需要登录到linux上,进行如下操作: 进入/usr/sbin目录 cd /usr/sbin 将当前的pr ...

  5. Apache网页深入优化之ab压力测试、工作模式与目录属性优化

    ab压力测试工具 Apache自带压力测试工具ab,简单易用,且可以模拟各种条件对Web服务器发起测试请求.ab工具可以直接在Web服务器本地发起测试请求,这对于需要了解服务器的处理性能至关重要,因为 ...

  6. Apache常见配置及问题

    1.Apache的配置由httpd.conf文件配置修改. 主站点的配置(基本配置) (1) 基本配置: ServerRoot "/mnt/software/apache2" #你 ...

  7. Apache优化相关

    Apache优化相关 Apache所运行的硬件环境都是对性能影响最大的因素,即使不能对硬件进行升级,也最好给Apache一个单独的主机以免受到其他应用的干扰.各个硬件指标中,对性能影响最大的是内存,对 ...

  8. ## stm32F1 VL53L0X例程及部分代码讲解(可调工作模式版)

    stm32F1 VL53L0X例程及部分代码讲解(可调工作模式版) 前段时间为了使用这个模块,翻看手册,发现全是英文看不太懂,就到处从网上找VL53L0X的例程,发现下载的很多个例程都不能用.为了避免 ...

  9. Apache 工作模式配置优化

    Apahce 工作模式配置 1.查看当前MPM工作模式 /usr/local/apache2/bin/apachectl -VServer version: Apache/2.4.27 (Unix) ...

最新文章

  1. Swift2.0 中的String(一):常用属性
  2. SpringMVC 课纲
  3. python脚本监控mysql数据库_Python脚本监控mysql数据库,Python脚本监控mongo数据库
  4. satd残差_RDO、SAD、SATD、λ相关概念【转】
  5. undefined reference to `dlclose‘问题解决方法
  6. Makefile:宏定义EXTRA_CFLAGS += -D 与CONFIG_ =y
  7. MFC学习心得第一篇
  8. 使用jave1.0.2.jar进行音视频转码
  9. 魔兽世界服务器开启mysql_魔兽世界服务端Trinity编译安装
  10. python打印输出如下图形_python题目要求:输出如下图片中的图形
  11. webrtc.node: undefined symbol: _ZN3rtc10DIGEST_MD5E
  12. 可以使用GPU暴力破解密码的软件
  13. 计算机键盘音乐 卡农,巴赫键盘音乐
  14. 文章详情页面评论功能添加及实现原理
  15. Sparkplug规范-4.引用标准和资源
  16. Unity加载倾斜摄影模型/激光点云,开源
  17. SQL数据库msdb置疑(急)
  18. Android 7再带壁纸,Android7 添加壁纸系统或替换系统壁纸
  19. 修改jenkins的镜像地址
  20. java程序员烂大街了吗?java入坑之前先来看看行情

热门文章

  1. Java:取得当前日期一周之前/之后的日期,或者是一月之前/之后的日期
  2. 前端路由(一) 路由,hash,history
  3. Elasticsearch 参考指南(多索引)
  4. 教你辨别36k纯数据科学家
  5. windows server r2 之如何设置共享文件夹访问不需要输入用户名和密码
  6. Exchange对AD的访问
  7. 改造HINT的输出方式
  8. 2019 Mac装Cocoapods的步(cai)骤(keng)记录
  9. oracle数据库学习相关笔记-转换函数
  10. 模拟红绿灯交替指示编程思路