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

问题描述 投票:0回答:1

我使用的脚本消耗了大量的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
bash debian
1个回答
1
投票

您可以限制与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
© www.soinside.com 2019 - 2024. All rights reserved.