提问人:In78 提问时间:11/10/2023 更新时间:11/10/2023 访问量:37
如何为其他进程无法使用的进程隔离内存和 cpu?
How to isolate memory and cpu for a process which no other process can use?
问:
我们有一个主机,其中运行了几个不同的进程,在这个主机上,我们部署了我们的网站。但是,当其他进程开始占用过多内存时,linux OOM 杀手开始杀死进程,它也会杀死我们的 Web 服务器。有没有办法确保某些内存和 cpu 始终可用于某个进程,并且 linux OOM 杀手不会杀死该进程?
基本上,我们可以做些什么来确保网站始终保持正常运行,无论主机上的进程数量是多少?
将内存分配给其他进程在 Linux 中无法使用的进程在此页面中,据说使用虚拟机管理程序可能是一种解决方案,这是处理此类问题的推荐方法吗?另外,docker 可以在这里提供帮助吗?
答:
您可以通过 使 OOM 杀手更宽松,或者通过 在给定的进程中完全禁用它。/proc/[pid]/oom_score_adj
文档说明:
在用于确定要终止的任务之前,将值添加到坏分数中。可接受的值范围为 -1000 () 到 +1000 ()。这允许用户空间通过始终偏爱某个任务或完全禁用它来极化对 oom kill 的偏好。可能的最低值 -1000 等同于完全禁用该任务的 oom killing,因为它将始终报告 0 的坏分数。
/proc/<pid>/oom_score_adj
OOM_SCORE_ADJ_MIN
OOM_SCORE_ADJ_MAX
因此,在您的情况下,在启动该过程后,找到其 PID 并执行以下操作:
echo -1000 | sudo tee /proc/[PID]/oom_score_adj
这是因为您需要更高的权限来修改,即 。sudo tee
oom_score_adj
CAP_SYS_RESOURCE
另外,docker 可以在这里提供帮助吗?
不是真的,无论如何都需要在主机中解决问题。将内容放在容器或 PID/用户命名空间中不会影响潜在问题。
旁注:如果内存不足,在某个时候内核将不得不杀死一些东西,如果它不是你的进程,它很可能是其他一些重要的系统组件,会以意想不到的方式使事情崩溃。如果这不起作用,内核甚至可能决定恐慌。因此,为重要进程禁用 OOM 杀手可能会有所帮助,但并不是通用的最终解决方案:这取决于具体情况。
评论