Тема: Утечка памяти
Всем привет
Поставил себе на Keenetic скрипт sdundle. Но со временем он начинает рости в памяти, вытеснять другие приложения в SWAP, как следствие винт начинает лишний раз "дергаться". Гляньте пожалуйста, в чем дело?
#!/bin/sh
UNIDLE=600
SLEEPTIME=3
ctimer=0
cline="";
ti=0
tu=0
while true; do
cat /proc/diskstats | grep "sda " > /var/log/unidle.log
while read line; do
if [ "$cline" != "$line" ]; then
cline=$line
ctimer=0
if [ "$ti" -gt "0" ]; then
s=`printf "%d:%d:%d\n" $(($ti/60/60%60)) $(($ti/60%60)) $(($ti%60))`
logger "Clear UnIdle Timer. Timer $s"
logger "Start_Stop_Count: " `sinfo |grep Start_Stop_Count| awk '{print $10}'`
logger "Load_Cycle_Count: " `sinfo |grep Load_Cycle_Count| awk '{print $10}'`
logger "Power_On_Hours: " `sinfo |grep Power_On_Hours| awk '{print $10}'`
ti=0
fi
tu=$(($tu+$SLEEPTIME))
else
ctimer=$(($ctimer+$SLEEPTIME))
if [ "$ctimer" -lt "$UNIDLE" ]; then
s=`printf "%d:%d:%d\n" $(($ctimer/60/60%60)) $(($ctimer/60%60)) $(($ctimer%60))`
# logger "Run UnIdle Commnad. Timer $s"
smartctl -i -d sat /dev/sda 2>/dev/null
tu=$(($tu+$SLEEPTIME))
else
ti=$(($ti+$SLEEPTIME))
if [ "$tu" -gt "0" ]; then
s=`printf "%d:%d:%d\n" $(($tu/60/60%60)) $(($tu/60%60)) $(($tu%60))`
logger "Stopping UnIdle. Timer $s"
logger "Start_Stop_Count: " `sinfo |grep Start_Stop_Count| awk '{print $10}'`
logger "Load_Cycle_Count: " `sinfo |grep Load_Cycle_Count| awk '{print $10}'`
logger "Power_On_Hours: " `sinfo |grep Power_On_Hours| awk '{print $10}'`
tu=0
fi
fi
fi
sleep $SLEEPTIME
done < /var/log/unidle.log
done
P.S. Думаю если что сделать два скрипта, sdunidle1 и sdunidle2, они будут друг друга запускать по очереди. Н это уже заплатка