我了解在Linux上有一个称为“OOM Killer”的内核功能。当OOM(内存不足)的条件消减时,是否存在诸如“进程恢复器”之类的东西?
我知道出于各种原因很难实现此功能,但是是否有接近的功能?
编辑:示例:“Resurrector”将保证有一块内存,用于存储有限的过程信息集(例如,命令行,环境等)(即,不是整个过程代码和数据!)。 。清除OOM条件后,“Resurrector”就可以通过该列表并“复活”某些过程。
从我至今收集的内容来看,似乎并没有类似于我所要求的功能。
最佳答案
不会。一旦某个进程被OOM杀手杀死,它就死了。您可以重新启动它(在资源允许的情况下),如果它是由系统管理的(也许通过inittab),则可能会以这种方式重新启动。
编辑:作为思想实验,请考虑流程的复活意味着什么。即使您可以存储整个流程状态,也不想这样做,因为终止的流程可能是内存不足情况的原因。
因此,您可能应该做的最好的事情就是存储它的启动状态(命令行等)。但这也不是一件好事,因为这又可能是为什么系统首先耗尽内存的原因!
此外,如果您以这种方式复活了某个流程,则不会告诉您可能出了什么问题。如果过程控制硬件怎么办?如果过程控制不应重复运行怎么办?如果它与不再存在的tty连接了怎么办(因为sshd是被杀死的进程之一)?
系统可能无法意识到流程周围存在大量上下文。唯一明智的事情是内核所做的事情:杀死傻瓜然后继续。
我想您可以想象一个“将进程从磁盘休眠”的策略,但是鉴于我们内存不足(包括交换),这意味着要么预先保留一些磁盘空间,要么决定在磁盘上为此分配磁盘空间。飞。哪种策略都可能无法处理所讨论过程的规模。
简而言之:不,您不会从OOM杀手那里回来的。这是一个杀手,,您只需要对付它。
关于linux - 在 "OOM Killer"之后,是否有一个 "Resurrector"?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1946890/