分享

Apache工作模式及配置参数优化详解 // PHPBoy

 牵牛吃草 2016-06-12
读后感:perfork模式已经过时了,用已经完善的WORKER性能更好。一个主进程控制子进程,子进程跑多线程,同一个子进程的多线程是共享同一段内存的,高并发下占用内存相对小,每个子进程都有自己的内存池。

导语

自从笔者在百度空间“一不小心”点击了升级博客空间懊悔之后,一直寻思摒弃百度博客,自己搭建一个博客站点。经过“多番”努力,从选择VPS——>选择博客程序——>网站/域名备案——>数据迁移(百度博客文章)——>内容整理——>站点上线,自至站点已运行了一段时间,总是希望最大化的利用硬件资源,达到最优化的LMAP配置。

阿里云主机硬件

CPU:1核 Xeon 2.26GHz
内存:512M
硬盘:40G
带宽:独享1M

以上硬件阿里云主机的最低配置,虽然硬件配置稍低,只要LMAP配置参数设置得当,运行一个小型博客站点还是绰绰有余。

阿里云主机软件搭配

操作系统:Linux CentOS 6.2
WEB服务器:Apache 2.2.15
数据库:MySQL 5.1.66
PHP:5.3.3

以上LAMP环境是笔者手动安装配置的,阿里云主机提供商只负责安装mini版的linux操作系统,很多常用软件都需要自己安装。

Apache工作模式及参数优化

apache的工作模式通常是指apache在运行时候的内存分配、进程和线程的分配方式。一个运行apache的服务器在响应用户请求时,是启用一个新的或者已有的进程来处理,还是在已有的进程中启用一个线程来处理,这就是由apache的工作模式来确定的。

查看apache的工作模式

1
apachectl -l

或者

1
httpd -l

看到的prefork.c,说明使用的prefork工作模式。prefork工作模式是apache在linux下默认的工作模式,是使用最普遍的工作模式。其实apahe的工作模式主要有:beos,event,worker,prefork,mpmt_os2。但是除了prefork工作模式其他工作模式目前暂时还用不上,或者其他工作模式还有待于完善。而prefork工作模式每次响应用户请求时都是在已有或者新建一个进程来处理用户的请求。

apache在prefork工作模式下影响性能的几个重要参数说明

StartServers

apache启动时候默认开始的进程数

MinSpareServers

最小的闲置进程数

MaxSpareServers

最大的闲置进程数

ServerLimit

最大的进程总数

MaxClients

最大的进程总数

MaxRequestsPerChild

每个进程处理的最多请求数

配置举例

1
2
3
4
5
6
7
8
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 15
MaxClients 15
MaxRequestsPerChild 500
</IfModule>
说明

apache在启动时开启5个进程等待用户请求,最小闲置进程数为5,最大闲置进程数为10,最大的进程数为15,每个进程处理的最多请求数为500。

ServerLimit和MaxClients有什么区别呢?

是因为在apache1时代,控制最大进程数只有MaxClients这个参数,并且这个参数最大值为256,并且是写死了的,试图设置为超过256是无效的,这是由于apache1时代的服务器硬件限制的。但是apache2时代由于服务器硬件的升级,硬件已经不再是限制,所以使用ServerLimit这个参数来控制最大进程数,且在ServerLimit大于256时MaxClient大于256才有效。

MaxRequestsPerChild有什么作用呢?

每个apache开启的进程,最多处理完毕MaxRequestsPerChild个请求时该进程将被apache关闭,这是当然是为了防止内存泄漏。

MaxClients或者Serverlimit设置为15是什么概念呢?

由于apache响应用户的请求是很快的,基本上一个用户的请求都是在1秒内完成的,那么MaxClients设置为15理论上每天可以处理的请求或者每天的PV可以达到:156060*24=1296000,这样的PV还是相当的大的。当同时请求apache的用户超过15个时,其他多余的请求将要等待apache处理完毕当前的15个请求之后得到响应。

MinSpareServers与MaxSpareServers的作用?

apache在工作时,如果没有用户请求时,apache会保持一定的闲置进程来等待用户的请求,但是当同时有很多用户同时请求apache时,apache会按照MaxClients最大的进程数(如15)来开启进程处理用户的请求,当apache处理完用户请求后,当不再有用户请求时,apache会将开启的15进程关闭5个来保证最大的闲置进程数不超过10。

apache在prefork工作模式下参数的设置与调试

上述几个参数的设置是否合理,是需要根据服务器的硬件配置与服务器所安装的其他软件来进行不断磨合与调试的,笔者常用的调试工具有:

查看apache进程
1
ps –U apache –u apache u
模仿用户请求

apache的ab工具,ab的全称是ApacheBench,是 Apache 附带的一个小工具,专门用于 HTTP Server 的benchmark testing,可以同时模拟多个并发请求。具体详细的参数请百度apache ab

top命令

在调试apache的配置时,需要随时观察服务器的负载,如果负载已超过20就需要将httpd服务器重启,已免由于参数设置过高,服务器资源消耗过多而出现宕机,因为宕机之后服务器远程关闭与重启的时间是比较长的。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多