mat*_*teo 21 linux memory centos centos5
“我的”服务器有时会因为内存和交换空间不足而停止运行。(它一直响应 ping 但仅此而已,甚至没有 ssh)。
有人告诉我 linux 内存过量使用,据我所知,这与银行对金钱的处理相同:它授予进程比实际可用内存更多的内存,假设大多数进程实际上不会使用他们要求的所有内存,在至少不是同时所有。
请假设这实际上是我的系统偶尔挂起的原因,我们不在这里讨论是否是这种情况(请参阅什么可能导致服务器上的所有服务关闭,但仍然响应 ping?以及如何弄清楚) .
所以,
如何在 CentOS 中禁用或大幅减少内存过量使用?我读过有两个设置叫做 vm.overcommit_memory(值 0、1 或 2)和 vm.overcommit_ratiom 但我不知道我必须在哪里找到和更改它们(希望是一些配置文件),我应该尝试什么值,以及是否需要重新启动服务器才能使更改生效。
安全吗?我可以期待什么副作用?在谷歌搜索 overcommit_memory 时,我发现一些可怕的事情,比如人们说他们的服务器无法再启动......
由于导致内存使用量突然增加的原因是 mysql,因为 php 进行的查询反过来在服务 http 请求时被调用,我希望只有一些 php 脚本无法完成,因此不时会有大约 500 个响应服务器太忙,这是我可以承担的风险(当然更好的是让整个服务器变得无法访问并且必须重新启动它)。
或者,如果我选择了错误的设置,它真的会导致我的服务器无法重新启动吗?
Soh*_*rty 31
可以通过以下方式禁用内存过量使用 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
Run Code Online (Sandbox Code Playgroud)
这将无法重新启动。为了持久性,把它放在/etc/sysctl.conf文件中:
vm.overcommit_memory=X
Run Code Online (Sandbox Code Playgroud)
并运行sysctl -p。无需重新启动。
完全不合格的说法:禁用内存过量使用肯定比启用它“更安全”。
$customer 将它设置在几百个 Web 服务器上,它对稳定性问题有很大帮助。甚至还有一个 Nagios 检查,如果它没有被禁用的话,它会大声喊出火。
另一方面,当人们只想过度使用一个小内存并且永远不会真正使用它时,人们可能不认为让他们的进程耗尽内存是“安全的”。(即 SAP 将是一个很好的例子)
所以,你回来看看它是否对你有所改善。由于您已经在研究它以摆脱相关问题 - 我认为它可能对您有所帮助。
(我知道我会冒着被某个脾气暴躁的人投反对票的风险)
小智 5
我同意在某些情况下禁用过度使用比启用它更安全。如果服务器只运行很少的大内存作业(例如我的情况中的电路模拟),那么预先拒绝应用程序的内存请求比等待 OOM 事件(肯定会很快发生)要安全得多,我们经常看到服务器OOM 杀手完成工作后出现问题。
| 归档时间: |
|
| 查看次数: |
24361 次 |
| 最近记录: |