Linux系统内存缓存和缓冲清理脚本
memory-monitor.sh
#!/bin/bash
# 功能:监控系统空闲内存,低于4096MB时清理内存缓存并记录日志
# 定义日志文件路径(统一日志输出,避免分散)
LOG_FILE="/var/log/memory_monitor.log"
# 合并awk命令,一次提取已用内存(used)和空闲内存(free),减少进程创建
# NR==2 对应 free -m 输出的第二行(Mem: 行)
# $3:已用内存(MB),$4:空闲内存(MB)
read used free <<<$(free -m | awk 'NR==2 {print $3, $4}')
# 写入日志(添加分隔符、日期、清理前内存状态,统一写入LOG_FILE)
echo "===========================" >>${LOG_FILE}
date >>${LOG_FILE}
echo "Memory usage before | [Use:${used}MB][Free:${free}MB]" >>${LOG_FILE}
# 判断空闲内存是否≤4096MB
if [ ${free} -le 4096 ]; then
# 执行内存缓存清理(sync 先将脏数据写入磁盘,避免数据丢失)
# 1:清理页缓存;2:清理目录项和inode;3:清理所有缓存(推荐)
sync && echo 1 >/proc/sys/vm/drop_caches
sync && echo 2 >/proc/sys/vm/drop_caches
sync && echo 3 >/proc/sys/vm/drop_caches
# 清理后重新获取内存状态
read used_ok free_ok <<<$(free -m | awk 'NR==2 {print $3, $4}')
# 写入清理后日志
echo "Memory usage after | [Use:${used_ok}MB][Free:${free_ok}MB]" >>${LOG_FILE}
echo "Action:Memory cache cleaned successfully" >>${LOG_FILE}
else
# 空闲内存充足,无需清理
echo "Action:Not required (free memory is enough)" >>${LOG_FILE}
fi
# 正常退出脚本,返回0(表示脚本执行成功)
exit 0
作者:wanghongwei
版权声明:本作品遵循<CC BY-NC-ND 4.0>版权协议,商业转载请联系作者获得授权,非商业转载请附上原文出处链接及本声明。

浙公网安备 33010602011771号