free命令需配合脚本实现内存监控,提取memavailable值并用if判断阈值,每5秒检查,低于500mb时记录带时间戳日志,可增加连续检测和告警机制。

Free 命令本身不支持持续监控,但配合 shell 脚本可以实现周期性采集、阈值判断和告警逻辑。关键不是“运行一次 free”,而是把内存指标提取出来,用条件判断做自动化响应。
提取核心内存数值(避免被表头干扰)
free 默认输出带单位和表头,脚本中需用 -b/-m/-g 统一单位,并用 awk 提取数字行:
- 可用内存(MemAvailable,最准确):`free -m | awk '/MemAvailable/ {print $2}'`
- 已用内存百分比(兼容老内核):`free | awk '/Mem:/ {printf "%.0f", ($3/$2)*100}'`
- 注意:Linux 3.14+ 内核才提供 MemAvailable 行;若无,可用 `free | awk '/Mem:/ {print $3}'` 取 used,但需注意 cached/buffers 影响
写一个带阈值检查的循环监控脚本
例如每 5 秒检查一次,当可用内存低于 500MB 时记录日志并发送提示:
- 用 while true + sleep 控制间隔
- 用 if 判断数值是否越界,避免用字符串比较(如 [ "$avail" -lt 500 ])
- 示例片段:avail=$(free -m | awk '/MemAvailable/ {print $2}'); if [ "$avail" -lt 500 ]; then echo "$(date): Low memory: ${avail}MB" >> /var/log/memory-alert.log; fi
增强实用性的小技巧
让脚本能真正用起来,不只是打印数字:
- 加时间戳输出:用 `date "+%F %T"` 让日志可追溯
- 限制日志大小:用 logrotate 或脚本内判断文件体积后轮转
- 简单告警:echo 发到终端、写入 syslog、或用 mail 命令发邮件(需配置本地 MTA)
- 避免误报:连续 3 次超阈值再触发动作,可用计数变量实现











