什么是“内存不足”消息:牺牲孩子?


20

我的计算机最近用完了内存(使用大型GIS数据集时,编译软件会产生意料之外的结果)。在系统日志中,详细说明了如何处理OOM条件的以下行:

Out of memory: Kill process 7429 (java) score 259 or sacrifice child

or sacrifice child是什么意思 当然,这不是在考虑一些黑暗的仪式来使事情继续进行吗?

Answers:


8

从源文件中,我发现oom_kill.c,即OOM Killer,将此类消息写入系统日志后,将检查所标识进程的子进程,并评估是否有可能杀死其中一个进程来代替进程本身。

这里是从源文件中提取的注释,对此进行了解释:

/*
 * If any of p's children has a different mm and is eligible for kill,
 * the one with the highest oom_badness() score is sacrificed for its
 * parent.  This attempts to lose the minimal amount of work done while
 * still freeing memory.
 */

对于Firefox(网络内容)也是如此。
neverMind9

2

谈论杀死指定为发送信号的进程的子进程KILL


2
但这是什么意思呢?父母有什么方法可以“牺牲”孩子以自救?
Thanatos

我的猜测只是一个猜测,因为所有进程都是Linux init进程的后代,所以在此上下文中,父进程是Linux进程,其中子进程是各种应用程序。在这种情况下,Linux进程通过杀死其中一个子进程来挽救自己。
Seamus

0

这是Oom(内存不足)杀手。当系统内存不足时,Linux内核会杀死进程以释放内存。启发式方法确定哪个进程是释放内存而不破坏系统的最佳选择(通常,根拥有的进程不是最佳选择)。

这里有更多详细信息:OOM杀手如何决定首先杀死哪个进程?


4
但是,这并不能解释消息的“或牺牲孩子”部分。
2016年
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.