我运行一个古老的蓝色和白色G3 / 300运行Debian PPC Squeeze 2.6.30的爱好networking服务器。 重新启动后的performance还可以,但最终会越来越陷入困境。 现在是在76天的正常运行时间,主要的罪魁祸首似乎是10+ apache2进程的内存使用情况。
我想我需要降低StartServers , MinSpareServers和/或MaxSpareServers ,但是我不确定要调整哪一个,并且每个都有三个部分,具体取决于使用哪个mpm模块。
如何判断我需要更改以下哪一部分?考虑到这个盒子有448MB的物理内存(怪异的升级历史logging,每个64,128和256支),有什么合理的值?
<IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 </IfModule> <IfModule mpm_worker_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxClients 150 MaxRequestsPerChild 0 </IfModule> <IfModule mpm_event_module> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>
在我的apache2.conf中没有任何其他的StartServers实例,但是这些mpm模块都没有出现在mods-available或者mods-enabled 。 想法?
谢谢!
400MB对于Web服务器这些天来说并不多 – 你可能要考虑更换这个盒子:)
也就是说,如果你的内存使用量膨胀,你可能会在某个地方发生内存泄漏 – 现在快速testing一下httpd进程的大小,然后停止/启动Apache,看看它们是否小得多。 如果他们看着他们几天,看他们是否成长。
如果是内存泄漏, 真正的解决scheme是find并修复内存泄漏,但是由于这通常是一个痛苦的屁股,你也可以调整MaxRequestsPerChild除0(无限)以外的东西。 当他们提供了固定数量的请求(迫使他们在stream程中放弃泄漏的内存)时,这将会杀死Apache工作人员。
从更大的价值开始(数千人左右),并努力工作到数百人。 如果每个孩子的请求低于100,那么你的内存泄露就足够大了,以至于实际上可以解决这个问题,因为不断的杀死和重新产生apache工作者的性能将会非常显着。
Re:哪个mpm来调整,答案几乎肯定是prefork 。
您可以运行httpd -V并查找Server MPM:行,这将肯定地告诉您。
要确定内存使用的Apache进程,您将需要调整MaxClients。
一般的经验法则是:(Max desired Memory)/(1个Apache进程的内存使用率)=#Max Clients
最后还需要调整您的MaxSpareServers <= 最大客户端 。
一个进程的内存使用强烈依赖于你已经加载的模块(PHP等),所以你可能要设置最低客户端。