Apache 进程连接和内存的消耗问题

apache2跑一段时间之后,发现mysql挂掉了,登录进去一看,内存基本被耗光,top查了一下发现很多apache2的进程,每个占用20多M的内存,修改了几个参数之后,发现有部分好转

1. keepalive
KeepAlive 配置指令决定当处理完用户发起的 HTTP 请求后是否立即关闭 TCP 连接,如果 KeepAlive 设置为On,那么用户完成一次访问后,不会立即断开连接,如果还有请求,那么会继续在这一次 TCP 连接中完成,而不用重复建立新的 TCP 连接和关闭TCP 连接,可以提高用户访问速度。

KeepAliveTimeout 这个参数决定了,一个http进程能够等待多长时间?

设想一下,如果keepalive设置为on,而 keepalivetimeout设置为一个比较大的数字,apache占用内存会很快的增长。这是因为,一个apache进程完成了一个任务并达到了一定的内存占用,并不会马上退出,而是可以等待一个keepalivetimeout时间。假设用户的链接请求持续不断的到来,则这些积累起来的无用的apache进程就会相当多,直到timeout,这些进程才会被杀死。

但是,keepalive的确对于静态的文件,比如图像文件的传送是很有效的,因此,keepalive要设置为on,但是keepalivetimeout的时间区间则要设置的小些,比如5s

apache的keepalive和keepalivetimeout(apache优化)

在APACHE的httpd.conf中,KeepAlive指的是保持连接活跃,类似于Mysql的永久连接。

换一句话说,如果将KeepAlive设置为On,那么来自同一客户端的请求就不需要再一次连接,避免每次请求都要新建一个连接而加重服务器的负担。  
 
不过KeepAlive的连接活跃时间是受到一个参数:KeepAliveTimeOut限制的。

如果第二次请求和第一次请求之间超过KeepAliveTimeOut的时间的话,第一次连接就会自动中断,第二次请求需要再新建第二个连接。   所以,一般情况下,图片较多的网站应该把KeepAlive设为On。但KeepAliveTimeOut应该设置为多少秒,就值得斟酌了。 如果KeepAliveTimeOut设置的时间过短,例如,设置为1秒,那么APACHE就需要频繁的建立新连接,当然会耗费不少的资源;

反过来,如果KeepAliveTimeOut设置的时间过长,例如设置为300秒,那么APACHE中肯定有很多无用的连接会占用服务器的资源,也不是一件好事。所以,到底要把KeepAliveTimeOut设置为多少,要看网站的性质、流量、服务器的配置而定。  

这一点和MySql的机制有点相似,KeepAlive比较相当于:mysql_connect或mysql_pconnect;

KeepAliveTimeOut相当于:wait_timeout。  

2. MaxRequestsPerChild

这个参数是说,apache进程在处理了多少个请求之后,必须退出,重新开始,以免在处理中的内存问题。
对于php脚本来说,把这个参数设置的小一些是有好处的,可以避免程序使用的内存持续增长对apache带来的压力:让这个参数定期释放内存,因为php是在脚本执行完毕后,自动释放使用的资源(内存)的。

如果太小的话,重新产生一个apache进程也是要消耗资源的,因此这也是一个平衡问题。

转载于:https://my.oschina.net/ajian2014/blog/303719

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值