如何在Linux上编辑进程的/ proc / pid / oom_adj?

5
我有一个情况,我们的服务器正在杀死一个我不想被杀死的进程。 我的理解是,这是因为内核过度分配了内存,当实际内存用尽时,就会强制终止进程。 我的理解是,在这种情况下,我可以通过调整以下值来影响内核关于要终止哪个进程的决定:
/proc/[pid]/oom_adj
本文解释了所有这些:
http://www.oracle.com/technetwork/articles/servers-storage-dev/oom-killer-1911807.html 然而,当我作为ubuntu用户尝试时,会出现“权限被拒绝”的错误:
echo -15 > /proc/5641/oom_adj -bash: /proc/5641/oom_adj: Permission denied
sudo echo -15 > /proc/5641/oom_adj 也会给出相同的错误 我的理解是,这是因为shell没有以root身份执行“>”命令。
然而,我熟悉的解决方法都会出现“没有这样的文件或目录”的错误。

sudo bash -c ‘echo -15 > /proc/5641/oom_adj’
-bash: /proc/5641/oom_adj’: 没有那个文件或目录

sudo -s ‘echo -15 > /proc/5641/oom_adj’
-bash: /proc/5641/oom_adj’: 没有那个文件或目录

我做错了什么?


对于任何阅读此内容的人,该值应在-16到+15之间(-17为禁用OOM)(这是针对从systemd配置中的OOMScoreAdjust过来的人。那里的值范围为-1000至+1000)。 - Prashant Kalkar
或者使用oom_score_adj,它的范围也是从-1000到+1000。 - Prashant Kalkar
2个回答

3

试试这个:

sudo bash -c "echo '-15' | tee /proc/5641/oom_adj"

这将确保文件以root身份写入,因为bash正在以root身份运行tee


3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接