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

时间:2013-07-26 17:13:28

标签: linux process linux-kernel out-of-memory

我遇到的情况是我们的服务器正在杀死一个我不想被杀的进程。 我的理解是这种情况正在发生,因为内核过度使用内存,然后在实际内存不足时强制终止进程。 我的理解是,通过调整以下值,我可以影响内核关于在这种情况下杀死哪个进程的决定:

的/ proc / [PID] / oom_adj

本文解释了所有这些:
http://www.oracle.com/technetwork/articles/servers-storage-dev/oom-killer-1911807.html

但是,当我尝试将其作为ubuntu用户时,我收到了Permission denied错误:

echo -15> / proc / 5641 / oom_adj
-bash:/ proc / 5641 / oom_adj:权限被拒绝

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':没有这样的文件或目录

我做错了什么?

2 个答案:

答案 0 :(得分:3)

你正在echo作为root运行,但实际上你的shell试图在proc中写入,请查看此处以获得更多解释: How do I use sudo to redirect output to a location I don't have permission to write to?

答案 1 :(得分:2)

试试这个:

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

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