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

Modified on: Mon, 11 Nov 2019 15:00:02 +0800

“my”服务器不时停止运行,因为它耗尽了内存和交换空间。 (它一直响应ping,但仅此而已,甚至不是ssh)。

我被告知linux执行内存过量使用,据我所知,这与银行用钱相同:它允许处理比实际可用内存更多的内存,假设大多数进程实际上不会使用所有内存问,至少不是所有的同时。

请假设这实际上是我的系统偶尔挂起的原因,我们不在这里讨论是否是这种情况
(参见什么可能导致服务器上的所有服务都停止运行,但仍然响应ping?以及如何判断

所以,

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

  2. 并且安全吗?我可以期待什么副作用?
    当谷歌搜索overcommit_memory时,我发现可怕的事情就像人们说他们的服务器不能再启动了....

  3. 醇>

    由于导致内存使用量突然增加的原因是mysql,因为php提出的查询反过来在提供http请求时被调用,我希望只有一些php脚本无法完成,因此从时间上有500个响应到服务器太忙的时候,这是我可以承担的风险(当然更好的是让整个服务器无法访问并且必须硬重启)。

    或者如果我选择了错误的设置,它真的会导致我的服务器无法重启吗?

作者:Community,matteo

最佳答案

可以通过vm.overcommit_memory=2

禁用内存过量使用

0是默认模式,其中内核通过计算与正在进行的分配请求相比的空闲内存来启发式地确定分配。并将其设置为1启用了魔法模式,其中内核始终通告它有足够的可用内存用于任何分配。设置为2表示进程只能分配到(RAM +交换)并且当超出该数量时将开始获取分配失败或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。无需重启。


相关问答

添加新评论