如何限制脚本的内存使用量?

时间:2018-09-03 10:44:18

标签: bash debian

我使用的脚本消耗大量的ram内存,以至于冻结了我的计算机并显示错误。

您如何限制此特定脚本的内存使用量?

我使用debian 9(linux)

谢谢。

这是基本脚本

path="/home/xxx"
mesMenosUnDia=$(date +%m --date='-1 month')
fecha=$(date +"%Y-$mesMenosUnDia-%d")

echo "find"
list=$(find /home/xxx -type f)
listArray=($list)


for i in "${listArray[@]}"
do
        onlyDate=$(echo $i | grep -P '\d{4}\-\d{2}\-\d{2}' -o)
        if [[  $onlyDate < $fecha ]];then

                rm $i
        else

        fi
done

1 个答案:

答案 0 :(得分:0)

您可以使用ulimit限制要使用的最大内存。缺点是脚本将达到极限并死亡。但是您的计算机不会挂起,因为当脚本要求过多的内存时,它将被杀死。

您的脚本使用了太多的内存,因为您在内存中存储了太多的东西。具体来说,您将find命令的输出捕获到一个变量中,然后将所有这些数据复制到一个数组中,因此整个内容都会重复。

与其将所有内容都保留在内存中,不如将其放入磁盘中。

path="/home/xxx"
mesMenosUnDia=$(date +%m --date='-1 month')
fecha=$(date +"%Y-$mesMenosUnDia-%d")

echo "find"
find /home/xxx -type f > tmp


for i in $(<tmp)
do
        onlyDate=$(echo $i | grep -P '\d{4}\-\d{2}\-\d{2}' -o)
        if [[  $onlyDate < $fecha ]];then

                rm $i
        else

        fi
done

rm tmp