怎么看apache进程消耗内存

 我来答
yjtkgg321
2015-03-10 · TA获得超过3.4万个赞
知道大有可为答主
回答量:1.2万
采纳率:87%
帮助的人:2111万
展开全部
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进程也是要消耗资源的,因此这也是一个平衡问题。
thgtrh4
推荐于2018-05-10 · TA获得超过297个赞
知道答主
回答量:105
采纳率:100%
帮助的人:39万
展开全部
IHS 其实就是 Apache ,AIX 5.3 下运行在 worker 方式下,它被看作 Apache 未来的主流工作模式,它是一种多进程与多线程混合的模式。
Apache的主流工作模式MPM模式。MPM是Multi-Processing-Modules的简称,意思是多道处理模块。MPM模块有不同的种类。现在用的比较多的MPM种类主要是prefork和worker。prefork的工作方式是多个进程工作,每个进程会在处理一定数量的请求后结束(这个数量可能是无穷),没有线程的概念。worker被看作apache未来的主流工作模式,它是一种多进程与多线程混合的模式。

配置文件 httpd.conf 中 work 的参数配置项:

<IfModule worker.c>
ThreadLimit 100
ServerLimit 256
StartServers 8
MaxClients 1200
MinSpareThreads 100
MaxSpareThreads 300
ThreadsPerChild 100
MaxRequestsPerChild 0
</IfModule>

关键的问题出现在 MaxRequestsPerChild 参数。MaxRequestsPerChild这个指令设定一个独立的子进程将能处理的请求数量。
在处理“MaxRequestsPerChild 数字”个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放,如果再有访问请求,父进程会重新产生子进程进行处理。
如果MaxRequestsPerChild缺省设为0(无限)可以使每个子进程处理更多的请求,不会因为不断终止、启动子进程降低访问效率。
但如果占用了200~300M内存,即使负载下来时占用的内存也不会减少。内存较大的服务器可以设置为0或较大的数字。内存较小的服务器不妨设置成30、50、100,以防内存溢出。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式