内存监控bash脚本的CPU使用率相当高

时间:2013-11-21 09:55:23

标签: linux bash

我编写了一个小脚本来监控内存使用情况,并在免费缓存内存低于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使用率)

知道造成这种情况的原因以及如何优化它?

2 个答案:

答案 0 :(得分:2)

  

知道造成这种情况的原因以及如何优化它?

该行

sleep 5

在检查内存是否在指定范围内的条件下。有可能大多数情况下内存不在此范围内,导致无限循环无任何睡眠,并使脚本消耗的资源超出了您的预期。

取出if循环之外的行,这应该会有所帮助。

答案 1 :(得分:0)

通过cron而不是无限循环运行它,看看是否有帮助。