OOM-杀死内存消耗最高的用户的进程?

OOM-杀死内存消耗最高的用户的进程?

我有一个多用户系统,其中活动用户应该获得公平的可用内存份额。

我可以设置Linux来杀死总内存消耗最高的用户的进程吗?

当系统内存不足时,就会发生这种情况。我想这个用户最大的进程应该被杀死。

我不想对用户设置内存限制,因为它们的数量各不相同,而且如果大多数用户不工作,就会浪费内存。杀死最大的进程是可行的,但应该针对每个用户。否则,一个用户可能会产生许多小进程,并导致另一用户的中型进程被终止。

答案1

下面的命令将杀死使用盒子上最多内存的进程。这是您正在寻找的,还是必须是使用最多内存的用户的进程(这可能不是内存短缺的最大罪魁祸首和原因)?

#!/bin/bash

free=`awk '/^Mem/ {print $3}' <(free -m)`

psout=`ps axo pid,args,pmem,rss,vsz --sort -pmem,-rss,-vsz | head -2`
pid=`echo $psout | cut -d " " -f 6`

if (( $free < 1 )); then

kill -9 $pid

fi;

编辑:我现在看到你的推理,将尝试修改上面的代码。

编辑 2:由于我今天不必完成这个项目,所以让我为您指明正确的道路。您可以从以下 URL 下载 smem(python 脚本): https://www.selenic.com/smem/download/

使用 -u 选项以 root 身份运行将为您提供每个用户使用的内存总量。将其放在一个数组中,按使用的内存排序,然后只需在上面的 ps 命令中添加 -u 即可杀死该用户的最严重的罪犯。

相关内容