目前我正在尝试使用 QEMU/KVM 在虚拟化环境中为虚拟机创建高效的动态内存分配。
我的最后一个问题是,当来宾虚拟机几乎耗尽内存时,它将使用 OOM Killer 并阻止任何没有足够内存的工作。但我正在做的是,当机器几乎耗尽内存时,我的算法将从其他来宾虚拟机中获取一些可用内存,并将其分配给需要它的机器。
所以我禁用了交换,ksm 没有运行,最后一件事是 OOM 杀手正在杀死其他程序。
我已阅读并搜索禁用 OOM Killer,我发现禁用它是个坏主意。
所以现在问这里有没有一种方法可以延迟 OOM Killer 1 或 2 秒并让进程运行,因为我的算法已经为机器分配了内存。
或者即使没有内存,进程也可以运行并分配内存,因此我的算法将为该机器分配内存。
答案1
我不确定我是否正确理解了您的问题,但您可能想要使用内存cgroup
,这可以限制内存使用并停止该组中的所有进程,以防内存即将耗尽。然后,您可以运行其他进程(不在该组中)来决定要做什么并可能增加内存限制。