我编写了一个小脚本来监控内存使用情况,并在免费缓存内存低于1000 MB时发送电子邮件,但大于800 MB:
#!/bin/bash
while [ true ] ;do
used=`free -m |awk 'NR==3 {print $4}'`
if [ $used -lt 1000 ] && [ $used -gt 800 ]; then
echo "Free memory is below 1000MB. Possible memory leak!!!" | /bin/mail -s "HIGH MEMORY ALERT!!!" user@mydomain.com
sleep 5
fi
done
该脚本运行良好,但由于某种原因,它具有10%的CPU使用率(我们正在谈论新一代四核Xeon处理器。我有更大的脚本,远低于1%的CPU使用率)
知道造成这种情况的原因以及如何优化它?
答案 0 :(得分:2)
知道造成这种情况的原因以及如何优化它?
该行
sleep 5
在检查内存是否在指定范围内的条件下。有可能大多数情况下内存不在此范围内,导致无限循环无任何睡眠,并使脚本消耗的资源超出了您的预期。
取出if
循环之外的行,这应该会有所帮助。
答案 1 :(得分:0)
通过cron而不是无限循环运行它,看看是否有帮助。