chr*_*ler 16 memory monitor process
我从事大规模数据集的工作。在测试新软件时,脚本有时会偷偷靠近我,快速获取所有可用 RAM,并使我的桌面无法使用。我想要一种为进程设置 RAM 限制的方法,以便如果它超过该数量,它将被自动终止。特定于语言的解决方案可能不起作用,因为我使用了各种不同的工具(R、Perl、Python、Bash 等)。
那么是否有某种进程监视器可以让我设置 RAM 的阈值量并在使用更多进程时自动终止进程?
Ame*_*Jah 12
我强烈建议不要这样做。正如@chrisamiller 所建议的,设置 ulimit 将限制进程可用的 RAM。
但是,如果您坚持,请遵循此程序。
将以下脚本另存为killif.sh:
#!/bin/sh
if [ $# -ne 2 ];
then
echo "Invalid number of arguments"
exit 0
fi
while true;
do
SIZE=$(pmap $1|grep total|grep -o "[0-9]*")
SIZE=${SIZE%%K*}
SIZEMB=$((SIZE/1024))
echo "Process id =$1 Size = $SIZEMB MB"
if [ $SIZEMB -gt $2 ]; then
printf "SIZE has exceeded.\nKilling the process......"
kill -9 "$1"
echo "Killed the process"
exit 0
else
echo "SIZE has not yet exceeding"
fi
sleep 10
done
Run Code Online (Sandbox Code Playgroud)现在使它可执行。
chmod +x killif.sh
Run Code Online (Sandbox Code Playgroud)现在在终端上运行这个脚本。替换PROCID为实际进程 ID 和SIZE大小(以 MB 为单位)。
./killif.sh PROCID SIZE
Run Code Online (Sandbox Code Playgroud)
例如:
./killif.sh 132451 100
Run Code Online (Sandbox Code Playgroud)
如果SIZE是 100,那么如果其 RAM 使用量超过 100 MB,则进程将被终止。
警告:您知道自己要做什么。杀死进程不是一个好主意。如果该进程有任何关闭或停止命令,则编辑脚本并将kill -9命令替换为该shutdown命令。
chr*_*ler 11
我讨厌成为回答自己问题的人,但今天早上我找到了一种替代方法,它包含在一个不错的小实用程序中。它将限制 CPU 时间或内存消耗:
https://github.com/pshved/timeout
我先试一试这个,但赞成 Amey Jah 的好答案。如果这个失败了,我会检查一下。