首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么OOM杀手不能扼杀这个要求太多的过程呢?

为什么OOM杀手不能扼杀这个要求太多的过程呢?
EN

Unix & Linux用户
提问于 2014-06-10 08:25:42
回答 2查看 4.3K关注 0票数 14

我们在这里解释:Linux是否会在不问我内存是否不足的情况下就开始扼杀我的进程?可以通过overcommit_memory配置OOM-Killer,并且:

  • 2=没有超额承付。如果要求太多,分配就会失败。
  • 0,1=超额承诺(启发式或始终如此)。在实际访问过多内存时,根据某些启发式方法终止某些进程(Es)。

现在,我可能完全误解了这一点,但是为什么没有一个选项(或者为什么它不是默认的)来关闭实际上试图访问它分配的太多内存的进程?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2014-06-10 09:21:19

考虑一下这种情况:

  • 您有4GB的内存空闲。
  • 错误的进程分配3.999GB。
  • 打开任务管理器以终止失控进程。任务管理器分配0.002GB。

如果被终止的进程是请求内存的最后一个进程,则任务管理器将被杀死。

或者:

  • 您有4GB的内存空闲。
  • 错误的进程分配3.999GB。
  • 打开任务管理器以终止失控进程。X服务器分配0.002GB来处理任务管理器窗口。

现在你的X服务器被杀了。

它没有引起问题,只是“在错误的时间在错误的地点”。当没有剩下的内存时,它碰巧是分配更多内存的第一个进程,但它不是开始使用所有内存的进程。

票数 25
EN

Unix & Linux用户

发布于 2020-07-14 20:09:20

这个问题困扰了我很长时间,我所发现的只有全能的"Linux维护者“在鼓吹OOM杀手是人类发明的终极工具。(我想知道这些人中的大多数人是否每天都使用Linux,因为他们的言论听起来与我在现实中看到的相距甚远.)

从我对OOM杀手的经验来看(很多次结冰和崩溃,重新启动,很多痛苦,浪费了很多时间,永远无法挽回)我对OOM杀手的理解是,它是坏的,它不起作用,而且它在设计上有根本的缺陷,因为它不会杀死主犯(就像Windoze那样分配更多内存的应用程序).相反,它杀死了围绕着主要大进程的过程,这不会带来任何结果。

在我看来,这个Linux杀手看起来就像以前设计的那样,当时计算机的内存不足128 MB,浏览器还没有出现。这是不切实际的,不符合今天的标准。

这些命令对于您为键盘快捷键分配是有用的:

首先,使用以下命令测试要终止的进程:

代码语言:javascript
复制
ps aux | grep STRING
ps aux | grep PORTION_OF_NAME_WITHOUT_QUOTES_OR_SPACES

如果它显示了您想要杀死的进程,那么将它放在下面括号内的脚本中。

代码语言:javascript
复制
#!/bin/bash
#
kill -9 $(ps aux | grep type=renderer)
# the above will kill all my Chromium processes
# without having to restart my entire browser or losing progress
# incognito window will be kept alive, instead of lost
#
sudo killall tumblerd
# (optional)

甚至更好:

代码语言:javascript
复制
sudo apt remove tumbler
票数 -3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/136364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档