我被告知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个响应服务器太忙了,这是我可以承担的风险(当然更好的是让整个服务器无法访问并且必须硬重启).
或者,如果我选择了错误的设置,它真的会导致我的服务器无法重启吗?
解决方法
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.无需重启.