腳本說明
使用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:如果你希望徹底清理所有緩存,可以使用這個選項。
注意事項
性能影響:清理緩存可能會導致系統性能短期下降,因為緩存被清空后,系統需要重新加載數據(會過濾掉無用的)。
謹慎使用:嚴禁頻繁使用,