Cent OS:如何closures或减less内存过量使用,安全吗?

有时我的服务器因为内存和交换空间不足而停止运行。 (它保持响应平,但没有比这更甚,甚至没有SSH)。

我被告知linux是否会执行内存过量使用,据我所知,这与银行用金钱所做的一样:假设大多数进程不会真正使用所有要求的内存,至less不是全部在同一时间。

请假设这实际上是我的系统偶尔挂起的原因,我们不要在这里讨论这是否是这种情况(请参阅什么可能导致服务器上的所有服务closures,但仍然响应ping以及如何弄清楚 ) 。

所以,

  1. 如何在CentOS中禁用或减less内存过量使用? 我读过有两个名为vm.overcommit_memory(值0,1或2)和vm.overcommit_ratiom的设置,但我不知道在哪里我必须find并更改它们(有些configuration文件希望),我应该尝试什么值,以及是否需要重新启动服务器才能使更改生效。

  2. 是安全的吗? 我可以期待什么副作用? 当googling overcommit_memory我发现像人们说他们的服务器无法启动了可怕的东西….

由于是什么导致内存使用量的突然增加是由于MySQL的查询,而这又是在服务HTTP请求时调用,我期望只是一些PHP脚本无法完成,因此有时500响应时服务器太忙,这是我可以采取的风险(当然更好的是,整个服务器变得无法访问,必须重新启动它)。

或者如果我select了错误的设置,真的可能导致我的服务器无法重新启动?

内存过量使用可以通过vm.overcommit_memory=2来禁用

0是默认模式,其中内核通过计算与正在进行的分配请求相比的空闲内存来试探性地确定分配。 将其设置为1将启用向导模式,在此模式下,内核始终会通知其具有足够的可用内存用于分配。 设置为2意味着进程只能分配upto(RAM + swap),并且当超出该数量时将开始获取分配失败或OOM消息。

这样做是否安全,没有。 我没有看到禁用内存过量使用的正确用例实际上有所帮助,除非您是100%确定的工作负载和硬件容量。 如果您有兴趣,请安装kernel-docs软件包并转到/Documentation/sysctl/vm.txt阅读更多内容。

如果你设置vm.overcommit_memory=2那么你不必担心overcommit_ratio。

 echo 0/1/2 > /proc/sys/vm/overcommit_memory 

这将无法幸存重启。 为了持久化,把它放在/etc/sysctl.conf文件中:

 vm.overcommit_memory=X 

并运行sysctl -p 。 无需重启。

完全不合格的声明:禁用内存过量使用肯定比启用它“更安全”。

$ customer在几百台Web服务器上设置了它,并且帮助解决了很多稳定性问题。 如果它没有被禁用的话,甚至还有一个Nagios支票大声呼救。

另一方面,人们可能不会认为当他们只是过度使用一些内存而不愿意真正使用这些内存的时候,他们的stream程就会变得不安全。 (即SAP将是一个很好的例子)

所以,你回头看看是否能为你提供帮助。 既然你已经在研究它,以摆脱相关的问题 – 我认为这可能对你有所帮助。

(我知道我会冒险一个脾气暴躁的人downvote)

我同意禁用overcommit比在某些情况下启用它更安全。 如果服务器只运行less量的大内存作业(就像我的情况下的电路仿真一样),那么先拒绝应用程序的内存请求,而不是等待OOM事件(这很快会出现)在OOM杀手已经完成其工作后有问题。