“杀死最大的过程”按钮


14

这台笔记本电脑有一个SSD,因此我决定省略掉交换。在大多数情况下,此方法效果很好,但有时RAM会变短,并且计算机会变得非常缓慢并趋于冻结。如果我注意到冻结足够快,有没有办法实现直接杀死内核的“杀死最大进程”按钮?或者,因为它是一台计算机,所以当它开始冻结并拍摄最大的过程本身时,也可以使用启发式方法。


您是说“杀死最大的过程”命令吗?
拉梅什2014年

Linux有这个。这就是OOM杀手。但是您必须启用内存过量使用(在大多数发行版中默认情况下处于启用状态)。
Patrick

@Patrick overcommit_memory0overcommit_ratio50
Reactormonk 2014年

Answers:


12

根据您的评论,听起来好像系统正在交换。

Linux有一个OOM杀手,当系统过量使用它的内存时调用它,现在它已经用完了。
Linux默认情况下会执行内存过量使用,这基本上意味着它为程序提供的内存比系统实际拥有的更多。这样做的前提是程序不会真正使用它们要求的所有内存。但是,当系统内存不足时,它已经告诉各个正在运行的进程它们具有内存,因此不能再拒绝它了。取而代之的是调用OOM杀手。OOM杀手基本上找到了内核认为可以缓解内存不足状况的进程。通常,这只是使用最多内存的过程,但是算法实际上要复杂得多。

由于已overcommit_memory设置为0(自动模式),因此内核正在执行内存过量使用。因此,从您解释的行为来看,听起来好像系统正在大量交换。

从这里有2个选项。

减少掉期

您的系统用完了RAM,因此内核开始将事物推入交换区域。如果您的系统用完交换,它将调用OOM杀手。但是,由于您还有剩余的自由交换空间,因此不会发生这种情况。

您的最初想法是手动终止进程。

当您认为系统交换过多并且需要终止某些工作时,可以手动终止进程。这可以通过内核SysRq触发器来完成。

内核具有所谓的“魔术SysRq”。这是一些功能,可以告诉内核执行某种紧急操作。这可能是“以只读方式重新安装所有卷”,“同步所有文件系统”或“立即重新引导”之类的事情。这些选项之一也是调用OOM杀手。

如果您的内核启用了魔术SysRq(内核选项CONFIG_MAGIC_SYSRQ),则可以通过两种方式执行此操作。

  1. Alt+ SysRq+ f
    只需按键盘上的这3个键。
  2. echo f > /proc/sysrq-trigger
    这将执行与键盘方法完全相同的任务,但以编程方式执行。

您也可以完全禁用交换,这正是我在大多数系统上所做的事情,并且正是由于这个原因。交换是有好处的,因为内核将抢先交换出未使用的数据,从而将更多的RAM用于缓存。但这会导致您看到此强制交换问题。

我个人认为最好的解决方案是某种内核选项,以在强制交换时调用OOM杀手。基本上让抢先式交换起作用,但是如果内核由于没有RAM而被迫将某些东西移入交换中,则调用OOM杀手。
不幸的是,这只是我个人的愿望。它不会这样做。


我不知道OOM Killer。我在想一个脚本,该脚本使用topps命令连续监视内存使用情况,如果超过一定的阈值限制,则使用kill命令终止该进程。
拉梅什

我不使用任何交换。
Reactormonk 2014年

看看哪个进程被oom killer杀死了:grep -E "oom-killer|Killed process" /var/log/syslog /var/log/syslog.1
lesmana 2014年

@Tass哦,我完全为“我决定省​​略掉交换”的注释而感到烦恼,抱歉:-(.。尽管“手动终止进程”信息仍然有效。但是当内存不足时,您不应感到缓慢。应该会体验内核只是在杀死事物
Patrick

@Patrick发生了,但是大约30分钟后。
Reactormonk 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.