Cent OS:如何关闭或减少内存过量使用,这样做安全吗?


20

有时,“我的”服务器会停顿,因为它耗尽了内存和交换空间。(它一直在响应ping,但仅此而已,甚至没有ssh)。

我被告知linux确实进行了内存过量使用,据我所知,这与银行用钱做的一样:假定大多数进程实际上不会使用他们要求的所有内存,它会为进程提供比实际可用更多的内存。至少不是同时所有。

请假设这实际上是我的系统偶尔挂起的原因,在这里我们不要讨论是否是这种情况(请参阅什么会导致服务器上的所有服务掉线,但仍然对ping作出响应?以及如何找出原因) 。

所以,

  1. 如何在CentOS中禁用或减少内存过度使用?我已经阅读了两个设置,分别称为vm.overcommit_memory(值0、1或2)和vm.overcommit_ratiom,但我不知道必须在何处查找和更改它们(希望是一些配置文件),应尝试使用哪些值,以及是否需要重新引导服务器以使更改生效。

  2. 而且安全吗?我可以期待什么副作用?谷歌搜索overcommit_memory时,我发现一些可怕的事情,例如人们说他们的服务器无法启动。

由于导致内存使用量突然增加的原因是mysql,因为它是由php进行的查询,而在服务于http请求时又调用了php,所以我希望只有一些php脚本无法完成,因此有时会有500响应服务器太忙,这是我可以冒的风险(一定要好一些,因为整个服务器无法访问,并且必须对其进行硬重启)。

如果选择错误的设置,是否真的会导致服务器无法重新启动?


1
禁止过量使用是不会帮你,当你真正的内存不多了。不过,向服务器添加RAM可能会有所帮助。
迈克尔·汉普顿

2
禁用过量使用将不是最终的解决方案,但可以提供很多帮助,如果服务器内存耗尽的任何时间(很长一段时间内只有一次),我只会拒绝几个http请求(或服务不佳),而不是完全永久地保留我的服务器DIE(直到我重新启动它)
matteo

Answers:


30

内存过量使用可以通过以下方式禁用 vm.overcommit_memory=2

0是默认模式,在该模式下,内核通过计算可用内存(与发出的分配请求相比)来启发式地确定分配。并将其设置为1将启用向导模式,在该模式下,内核始终会通告其具有足够的可用内存来进行任何分配。设置为2意味着进程只能分配最多可配置overcommit_ratio的RAM (),并且超出该数量时将开始获得分配失败或OOM消息。

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

如果设置,vm.overcommit_memory=2则它将过量使用配置中的物理RAM百分比vm.overcommit_ratio(默认值为50%)。

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

这将在重新启动后无法幸免。为了持久性,请将其放在/etc/sysctl.conf文件中:

vm.overcommit_memory=X

然后跑sysctl -p。无需重启。


您没有回答的部分是我在哪个文件中更改了vm.memory_overcommit设置,尤其是我是否需要重新启动(或其他操作)才能使它生效
matteo

2
回声0/1/2> / proc / sys / vm / overcommit_memory这将无法重新启动。为了保持持久性,请将其放在/etc/sysctl.conf文件vm.overcommit_memory = X中,然后运行sysctl -p。无需重启
Soham Chakraborty

非常感谢。请您将此内容添加到答案正文中,以便我可以正式“接受”它。
matteo 2013年

1
添加了新的部分。
Soham Chakraborty 2013年

4
使用overcommit_memory = 2时,“ overcommit_ratio”具有重要作用-它确定允许分配的物理RAM的百分比!因此,如果比率<100,那么您将留出一些未分配的RAM,可能用于磁盘缓存或类似用途。默认比率是50%,因此,如果不更改此设置,则只会使用物理RAM的50%!
David Gardner 2014年

6

完全不合格的声明:禁用内存过量使用绝对比启用内存“安全”。

$ customer已将其设置在数百台Web服务器上,并且在解决稳定性问题方面提供了很多帮助。如果从未禁用过Nagios,甚至有Nagios会大声喊出火声。

另一方面,当人们只想过多使用ram而永远不会真正使用它时,人们可能不会认为使进程退出内存是“安全的”。(即SAP将是一个很好的例子)

因此,您又回到了它是否可以为您带来改善的地方。由于您已经在研究它以摆脱相关问题-我认为这可能对您有所帮助。

(我知道我会冒一些脾气暴躁的人的反对票)


3

我同意禁用过量使用比在某些情况下启用它更安全。如果服务器仅运行少量大型内存工作(例如本例中的电路仿真),那么拒绝应用程序的内存请求比等待OOM事件(肯定会很快发生)要安全得多(肯定会很快发生),通常我们会看到服务器在OOM杀手完成工作后遇到问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.