如何隔离一个进程的内存和CPU,其他进程无法使用?

问题描述 投票:0回答:1

我们有一个主机,其中运行多个不同的进程,并且在该主机上,我们部署了我们的网站。然而,当其他进程开始占用太多内存时,Linux OOM 杀手就会开始终止进程,同时也会终止我们的 Web 服务器。有什么方法可以确保某些内存和CPU始终可供某个进程使用,并且Linux OOM杀手不会杀死该进程?

基本上,无论主机上的进程数量有多少,我们可以做什么来确保网站始终保持正常运行?

在linux中为进程分配其他进程无法使用的内存 在此页面中,据说使用虚拟机管理程序可以是一种解决方案,这是处理此类问题的推荐方法吗?另外,docker可以帮忙吗?

linux docker virtual-machine
1个回答
0
投票

您可以通过

/proc/[pid]/oom_score_adj
使 OOM 杀手更加宽松或完全禁用给定进程。

文档解释:

/proc/<pid>/oom_score_adj
的值会先添加到坏度分数中,然后再用于确定要终止哪个任务。可接受的值范围为 -1000 (
OOM_SCORE_ADJ_MIN
) 到 +1000 (
OOM_SCORE_ADJ_MAX
)。这允许用户空间通过始终优先选择某个任务或完全禁用它来极化 oom 终止的偏好。 最低可能值 -1000,相当于完全禁用该任务的 oom Killing,因为它总是报告 0 的坏度分数。

所以在你的情况下,启动进程后,找到它的PID并执行:

echo -1000 | sudo tee /proc/[PID]/oom_score_adj

sudo tee
是因为需要更高的权限才能修改
oom_score_adj
,即
CAP_SYS_RESOURCE

© www.soinside.com 2019 - 2024. All rights reserved.