我使用的脚本消耗大量的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
答案 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