我正在使用3gb内存VPS 6 server.If,我重新启动它,使大约4或5个httpd服务正在运行,所有这些服务都使用大约2.5%的内存(从top命令的res列上使用86M)。
我只是运行一个网站,这是尚未运行,所以我是唯一一个连接到它。
然而,每天我看到httpd内存百分比上升0.3或0.4取决于。这意味着,在4或5天后,这些httpd进程将使用大约4%的内存(在顶层命令的res列上有1.3亿内存),.I看不到日志中的任何错误,而且一切正常工作,但是如果我离开服务器而没有重新启动2周,我将耗尽内存。
例如,如果我运行的话,使用ab command.For实例来复制它的一种方法:
ab -c 2000 -t 60 http://xxx.xxx.xxx.xxx/
在运行它之后,每个httpd服务将比运行测试前使用大约0.3或0.4的内存。
同样,我没有在日志中看到任何错误。
这是正常的吗?
我一直在做更多的测试和research.My值:
KeepAlive Off
<IfModule prefork.c>
StartServers 1
MinSpareServers 1
MaxSpareServers 5
ServerLimit 15
MaxClients 15
MaxRequestsPerChild 2000
</IfModule>
这似乎是可以的,而且我总是有大约500 as的内存可以节省(至少当服务器刚刚重新启动时),.The问题是,五个始终处于活动状态的httpd进程的大小不断增加,因此当通信量到达服务器并创建更多子进程时,如果父httpd进程为120 as,那么父httpd进程的大小--所有的子进程都是120mb.So --不管MaxRequestsPerChild有多小,因为新的子进程将被创建,这将占用与以前的进程同样多的内存。有什么建议吗?
发布于 2013-06-05 15:55:27
实际上,您并没有说您使用的是什么web服务器软件。但是,如果您正在讨论apache (似乎使用了一个多进程模型),那么您应该看看这个MaxRequestsPerChild
指令。
例如,如果您运行的是php、ruby或perl应用程序,而这些应用程序(与大多数应用程序一样)对内存泄漏并不特别小心,那么您可能应该将MaxRequestsPerChild降低到大约40个左右。什么是好的价值确实有一点不同,尽管。一些应用程序栈与重新启动进程相关的成本要比其他应用程序栈高得多,而一些应用程序栈的内存泄漏问题要比其他的要多。在不同的情况下,我已经将MaxRequestsPerChild设置在5到1000之间,但通常最好是在感觉安全的情况下,低启动并逐步提高它。
您应该期望在正常情况下启动后,内存使用会有所增加,过一段时间就会趋于平稳。
如果您确实让您的服务器无人值守,并且它耗尽了内存,那么它可能会开始使用交换,并且会变得非常慢。因为请求没有被快速处理,更多的工作会堆积起来,而且它会消耗更多的内存,除非对进程数量的限制阻止了这一点。您需要考虑一下进程数量的限制,以及在这种情况下您认为服务器将开始使用多少内存。
你也不想有太多的交换。如果您有大量的交换,您的服务器将或多或少地完全没有响应,而它会慢慢地消耗它的交换内存。要么您将介入重新启动(您不太可能让一个shell工作),要么您将使用您所有的交换,OOM杀手将开始杀死进程。如果是这样的话,你更希望OOM杀手早点来。过多的掉期只会延长停机时间。对于大多数web服务器来说,使用比RAM多两倍的交换空间是完全不合适的。
举起你的最小预备役队员和最大预备役队员。我最多放15个左右。在那下面杀了他们有什么意义?最小应该是5分钟。
发布于 2013-06-05 20:02:13
您可能会出现内存泄漏--如果每次运行ab
测试时,工作人员都会不断增加,那么您可能会出现内存泄漏。(当您第一次启动服务器时,内存使用量超出了您的范围,这是正常的。持续可预测的增长不是这样的)。
如果您的问题是内存泄漏,那么可能不是web服务器的错误,而是您的代码(PHP或您使用的任何脚本语言,或者您所依赖的某个库编写得很糟糕)。
修复内存泄漏的方法是分析您的代码(如何做到这一点将是一个堆栈溢出问题。),查找内存泄漏,并修复它(或者让负责泄漏代码的人员来修复它)。
如果代码是不透明的(或者您只是没有时间),的答案提供了一个可行的解决办法.:确保您正在使用适当的MPM (在Unix上,这意味着prefork
或worker
),并将MaxRequestsPerChild
指令设置为足够低的值,使您的工作人员在耗尽RAM之前被回收。
此指令具有性能含义,在文档中有详细说明。
发布于 2013-06-09 23:14:42
最后,我发现了问题的所在,我的代码没有泄漏,也没有任何错误配置。该系统作为intended.However运行,问题与Web应用防火墙有关,该防火墙更新频繁,每次都会缓存规则,并使用大量的httpd内存。
谢谢大家
https://serverfault.com/questions/513448
复制相似问题