一聚教程网:一个值得你收藏的教程网站

热门教程

apache中MaxRequestsPerChild参数配置经验分享

时间:2022-06-30 17:58:15 编辑:袖梨 来源:一聚教程网

MaxRequestsPerChild参数介绍

用 记事本打开apache2confhttpd.conf,

查找MaxRequestsPerChild,将MaxRequestsPerChild 0改成MaxRequestsPerChild 50即可。

通常在“Windows任务管理器-进程”中可以看到两个apache.exe进程,一个是父进程、一个是子进程,父进程接到访问请求 后,将请求交由子进程处理。

MaxRequestsPerChild这个指令设定一个独立的子进程将能处理的请求数量。在处理 “MaxRequestsPerChild 数字”个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放,如果再有访问请求,父进程会重新产生子进程进行处理。

如果 MaxRequestsPerChild缺省设为0(无限)或较大的数字(例如10000以上)可以使每个子进程处理更多的请求,不会因为不断终止、启动 子进程降低访问效率,但MaxRequestsPerChild设置为0时,如果占用了200~300M内存,即使负载下来时占用的内存也不会减少。

内存 较大的服务器可以设置为0或较大的数字。内存较小的服务器不妨设置成30、50、100,以防内存溢出

下面看一个例子

从网络上搜索到一篇文章,说加大 MaxRequestsPerChild 可以促使增加子进程的复用,从而提高效率。不记得那篇文章是否提到了其使用的 Apache 的 MPM ,版本是 2.0 的没错,反正不是 woker 就是 prefork 了。

我使用的 prefork ,参考那篇文章,将 MaxRequestsPerChild 由 300 调整到了 3000 。

结果,后两天的监控结果是,在网站访问期的高峰期,服务器负荷很重,数据库的并发连接频频超过最高限制。Apache 的并发连接也几乎一直保持在最高,网站访问速度很慢,频繁出现访问超时的问题。

最开始以为是网站访问量过大,达到服务器硬件极限导致的正常现象,不过,手动重启 Apache 后,数据库并发连接迅速降低,之后缓慢增加,一直达到最高并发连接限制,并且很长时间无法减小。

之后,认为是数据库并发连接过高,导致系统负荷过大,而 Apache 过多的 KeepAlice 连接导致数据库的并发连接无法及时释放从而消耗大量系统资源,导致系统负荷过重。

最后,怀疑到 MaxRequestsPerChild 的 300 设置是否合理。

阅 读 Apache 手册关于 MaxRequestsPerChild 的说明后,认为 prefork 下,KeepAlice 开启的情况下,每一个新连接都会导致一个 Apache 子进程开启, MaxRequestsPerChild 设置过大,导致新连接产生新的子进程后,长期 idle ,这样并不一定合理。

根据网站的访问情况,并不需要那么大的 MaxRequestsPerChild ,客户端和 Apache 采用 http 进行连接,网站都是一些大小不大的文件,客户端在和 Apache 服务器数次交互后,就应该完成一次访问了,用户点击网站的频率也不会那么高,所以 MaxRequestsPerChild 不应该设置那么高,而应该设置低一些,以尽快释放数据库连接,尽快回收系统资源,以尽可能快速的满足新的请求的连接需求。

将 MaxRequestsPerChild 重新调整回默认的 300 ,情况有所改观。

最后,就像那句古话所说的,尽信书不如无书,换到互联网上也一样。不能盲目的参考网上的资料,特别是非严格发表的个人经验文档。网上的资料始终都只能作为参考,必须要经过自己的理解,再结合实际情况,进行调整。不然,导致的结果可能是无法预计的。

MaxRequestsPerChild 与 keepalive的关系

MaxRequestsPerChild  表示一个httpd进程最多服务多少个请求,然后自动退出

keepalive 表示连接可以复用

这两个参数看似没有什么关系,可是最近一个偶然的事情却把这两个参数扯到了一起。

这里面的微妙关系就是:MaxRequestsPerChild  在统计服务了多少个请求的时候,把开一次链接作为一个请求。


这意味什么呢?是考虑,如果你的请求都频繁的、不间断的来自一个客户端,这样的话,连接将会被一直被复用,

然后处理过的请求个数将永远不会超过MaxRequestsPerChild,但是可能每次的请求都会带来一定的内存增长,时间长了内存也就永远不会被释放。


所以,如果想 MaxRequestsPerChild  起到回收资源的作用,那么请把keepalive设置成off。

例子

对於 Apache 架设的伺服器,在遇到连线数问题上,以下参数是会考虑微调的

这是预设

ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000

不过遇到多个 VirtualHost 与连线变多时,需要适时调整

可能是这样子

ServerLimit 300
MaxClients 300
MaxRequestsPerChild 3000

ServerLimit 与 MaxClients 是针对同时间最大连线数?槎嗌伲?驳褥妒 Apache 程序数量,ps 一下就会有多少个 /usr/sbin/httpd 等

而 MaxRequestsPerChild 则是一个 Apache 子程序可以接受多少个 Request 量,等达到上限了就会被中断砍掉,再重新?生一个新的子程序

Timeout 是不是也要调,预设 120 秒,调 60 好了

热门栏目