脚本说明
使用Linux的Cron定时任务结合Shell脚本来实现自动化的内存释放。
脚本用到sync系统命令
sync的作用:sync 是一个 Linux 系统命令,用于将文件系统缓存中的数据强制写入磁盘。
在你执行reboot、poweroff、shutdown命令时,系统会默认执行此命令。以防止数据丢失。
脚本
#!/bin/sh
# 脚本名称:FreeMemory.sh
# 脚本功能:当内存占用达到一个阀值时,自动执行释放内存的脚本。
# 作者:北国大人 from CSDN
# 创建时间:2024年7月1日
# 最后修改时间:2025年3月31日
# 使用方法:crontab 设置定时任务
# 参数说明:阀值设置85%
# 依赖项:crontab shell
# 日志记录:/var/freememory/FreeMemoryLog.txt
# 示例用法:0 0 * * * /root/FreeMemory.sh 85>>/var/freememory/FreeMemoryLog.txt
# 注意事项:释放内存的风险较低,无须担心,但是严禁频繁执行此操作# 获取内存信息
total=$(free -m | grep Mem | awk '{print $2}')
used=$(free -m | grep Mem | awk '{print $3}')# 计算内存使用率
rate=$(($used * 100 / $total))# 获取当前时间
time=$(date)echo "############ $time ###############"# $1 是传递给脚本的参数,表示内存使用率的阈值
if [ $rate -gt $1 ]; thenecho "rate=$rate 内存使用率超过阈值,开始释放内存!"syncsleep 10echo 1 > /proc/sys/vm/drop_cachesecho "内存释放成功!"used2=$(free -m | grep Mem | awk '{print $3}')shifangle=$(($used - $used2))echo "内存释放了$shifangle G"
elseecho "rate=$rate 内存使用率正常"
fi
设置定时任务,每天执行一次即可
#每天执行一次,仅当内存占用达到85%时,才执行此操作。
crontab-e
0 0 * * * /root/FreeMemory.sh 85 >>/var/freememory/FreeMemoryLog.txt
echo 1:如果你只想清理页缓存,保留目录项和 inode,可以使用这个选项。
echo 2:如果你只想清理目录项dentries和 inode,保留页缓存,可以使用这个选项。
echo 3:如果你希望彻底清理所有缓存,可以使用这个选项。
注意事项
性能影响:清理缓存可能会导致系统性能短期下降,因为缓存被清空后,系统需要重新加载数据(会过滤掉无用的)。
谨慎使用:严禁频繁使用,