在Linux服务器运维管理中,内存使用状况的实时掌握至关重要,尤其对于CentOS系统,一个高效可靠的内存监控脚本不仅能帮助管理员及时发现潜在问题,还能为性能优化提供数据支撑,本文将分享一个实用的Shell脚本编写思路,帮助您构建自己的内存监控方案。
内存监控的核心指标

在编写脚本前,需要明确几个关键内存指标:总内存、已用内存、空闲内存、缓冲(buffer)与缓存(cache)使用量以及交换分区(swap)的使用情况,通过解析/proc/meminfo文件或使用free命令,可以获取这些数据。
脚本设计思路
一个完善的内存监控脚本应包含以下功能:实时获取内存数据、设定阈值触发警报、输出易读的日志记录,下面是一个基础示例:
#!/bin/bash
# 设置内存使用率阈值(百分比)
THRESHOLD=90
# 获取当前内存使用率
MEM_USED=$(free | grep Mem | awk '{printf "%.0f", $3/$2 * 100}')
# 获取交换分区使用率
SWAP_USED=$(free | grep Swap | awk '{if ($2 == 0) print 0; else printf "%.0f", $3/$2 * 100}')
# 生成时间戳
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
# 日志文件路径
LOG_FILE="/var/log/memory_monitor.log"
# 检查是否超过阈值
if [ $MEM_USED -ge $THRESHOLD ]; then
echo "$TIMESTAMP - 警告: 内存使用率已达 ${MEM_USED}%,请及时处理!" >> $LOG_FILE
# 此处可添加邮件或短信警报命令
else
echo "$TIMESTAMP - 正常: 内存使用率 ${MEM_USED}%" >> $LOG_FILE
fi
# 记录交换分区使用情况
echo "$TIMESTAMP - 交换分区使用率: ${SWAP_USED}%" >> $LOG_FILE 脚本功能扩展建议
历史数据趋势分析
可通过添加sar命令收集历史数据,生成每日/每周内存使用曲线图。进程级内存监控
集成ps或top命令,在内存超标时自动记录占用最高的进程信息。
多级警报机制
区分警告与严重警报级别,采用不同通知方式(如企业微信、钉钉机器人等)。自动清理机制
对于缓存占用过高的情况,可设置自动释放缓存的逻辑(需谨慎使用)。
部署与执行方法
- 将脚本保存为
/usr/local/bin/memory_monitor.sh - 添加执行权限:
chmod +x /usr/local/bin/memory_monitor.sh - 通过crontab设置定时任务,例如每5分钟执行一次:
*/5 * * * * /usr/local/bin/memory_monitor.sh
注意事项
- 阈值设置需根据服务器实际负载情况调整,生产环境建议保留15%-20%的缓冲空间
- 日志文件应定期轮替,防止磁盘空间被占满
- 在虚拟化环境中需要额外考虑宿主机的内存压力情况
- 建议先在测试环境验证脚本逻辑,避免误报影响正常业务
通过这个脚本,管理员可以建立起基础的内存监控体系,但需要认识到,脚本监控只是运维工作中的一环,真正的系统优化还需要结合业务特点进行综合分析,每个系统的内存使用模式都有其独特性,只有持续观察和调整,才能找到最适合自己业务的监控方案。

