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

posted @ 2021-05-12 21:51  wanghongwei-dev  阅读(245)  评论(0)    收藏  举报