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进程也是要消耗资源的,因此这也是一个平衡问题。