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

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

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

请假设这实际上是我的系统偶尔挂起的原因,我们不在这里讨论是否是这种情况
(见What can cause ALL services on a server to go down,yet still responding to ping? and how to figure out).

所以,

>如何在CentOS中禁用或减少大量内存过量使用?我读过有两个名为vm.overcommit_memory(值为0,1或2)和vm.overcommit_ratiom的设置,但我不知道我必须在哪里找到并更改它们(希望有些配置文件),我应该尝试什么值,以及是否需要重新启动服务器以使更改生效.
>是否安全?我可以期待什么副作用?
当谷歌搜索overcommit_memory我发现可怕的事情,比如人们说他们的服务器不能再启动….

因为内存使用量突然增加的原因是mysql,因为php生成的查询在服务http请求时被调用,我希望只有一些php脚本无法完成,因此不时会有500个响应服务器太忙了,这是我可以承担的风险(当然更好的是让整个服务器无法访问并且必须硬重启).

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

解决方法

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.无需重启.

相关文章

文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限...
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Wi...
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Lin...
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,...
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 Open...