本文目录导读:

我来为您介绍几种自动清理内存缓存的方法,根据使用场景提供不同的脚本方案。
Linux 系统内存缓存清理脚本
基础清理脚本
#!/bin/bash # 文件名: clear_cache.sh echo "=== 内存缓存清理脚本 ===" echo "清理前内存使用情况:" free -h # 清理页面缓存 sync && echo 1 > /proc/sys/vm/drop_caches # 清理目录项和inode缓存 echo 2 > /proc/sys/vm/drop_caches # 清理所有缓存(页面缓存、目录项、inode) echo 3 > /proc/sys/vm/drop_caches echo "清理完成!" echo "清理后内存使用情况:" free -h
增强版清理脚本(带安全检查和日志)
#!/bin/bash
# 文件名: smart_clear_cache.sh
# 配置参数
MEMORY_THRESHOLD=80 # 内存使用率超过此值才清理
LOG_FILE="/var/log/cache_clear.log"
# 日志函数
log_message() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}
# 获取当前内存使用率
get_memory_usage() {
free | grep Mem | awk '{print int($3/$2 * 100)}'
}
# 检查是否为root用户
if [[ $EUID -ne 0 ]]; then
echo "错误:此脚本需要root权限运行"
exit 1
fi
# 主逻辑
CURRENT_USAGE=$(get_memory_usage)
echo "当前内存使用率: ${CURRENT_USAGE}%"
if [ "$CURRENT_USAGE" -gt "$MEMORY_THRESHOLD" ]; then
log_message "内存使用率 ${CURRENT_USAGE}%,超过阈值 ${MEMORY_THRESHOLD}%,开始清理"
# 执行清理
sync
echo 3 > /proc/sys/vm/drop_caches
log_message "缓存清理完成"
echo "清理后内存使用情况:"
free -h
else
log_message "内存使用率 ${CURRENT_USAGE}%,未达阈值,跳过清理"
echo "内存使用率正常,无需清理"
fi
定时自动清理方案
使用 crontab 设置定时任务
#!/bin/bash # 设置定时清理脚本 # 创建清理脚本 cat > /usr/local/bin/auto_clear_cache.sh << 'EOF' #!/bin/bash sync echo 3 > /proc/sys/vm/drop_caches echo "$(date): Cache cleared" >> /var/log/cache_clear_cron.log EOF # 赋予执行权限 chmod +x /usr/local/bin/auto_clear_cache.sh # 添加到 crontab(每天凌晨3点执行) echo "0 3 * * * /usr/local/bin/auto_clear_cache.sh" | crontab - # 验证是否设置成功 crontab -l
systemd 服务定时清理
# 创建 systemd 服务 cat > /etc/systemd/system/cache-cleaner.service << 'EOF' [Unit] Description=Memory Cache Cleaner Service After=network.target [Service] Type=oneshot ExecStart=/bin/bash -c 'sync && echo 3 > /proc/sys/vm/drop_caches' User=root Group=root [Install] WantedBy=multi-user.target EOF # 创建定时器 cat > /etc/systemd/system/cache-cleaner.timer << 'EOF' [Unit] Description=Run cache cleaner every 6 hours [Timer] OnCalendar=*-*-* 0,6,12,18:00:00 Persistent=true [Install] WantedBy=timers.target EOF # 启动服务 systemctl daemon-reload systemctl enable cache-cleaner.timer systemctl start cache-cleaner.timer
Windows 内存清理脚本
PowerShell 脚本
# 文件名: Clear-Cache.ps1
Write-Host "=== Windows 内存缓存清理 ===" -ForegroundColor Green
# 显示当前内存使用情况
$os = Get-CimInstance Win32_OperatingSystem
$totalMemory = [math]::Round($os.TotalVisibleMemorySize/1024/1024, 2)
$freeMemory = [math]::Round($os.FreePhysicalMemory/1024/1024, 2)
$usedMemory = $totalMemory - $freeMemory
$usagePercent = [math]::Round(($usedMemory / $totalMemory) * 100, 2)
Write-Host "总内存: ${totalMemory}GB"
Write-Host "已使用: ${usedMemory}GB ($usagePercent%)"
Write-Host "可用: ${freeMemory}GB"
# 清理方式1:清空工作集
Write-Host "正在清理进程工作集..." -ForegroundColor Yellow
Get-Process | ForEach-Object {
try {
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
if ($_.Responding) {
$_.Refresh()
}
} catch {
# 忽略无法访问的进程
}
}
# 清理方式2:清空DNS缓存
Write-Host "正在清空DNS缓存..." -ForegroundColor Yellow
Clear-DnsClientCache
# 清理方式3:清空文件系统缓存
Write-Host "正在清理文件系统缓存..." -ForegroundColor Yellow
$EMPTY = @()
[System.IO.Directory]::GetLogicalDrives() | ForEach-Object {
try {
$drive = $_.TrimEnd('\')
[System.IO.DriveInfo]::new($drive).TotalFreeSpace | Out-Null
} catch {}
}
Write-Host "缓存清理完成!" -ForegroundColor Green
Write-Host "清理后内存使用情况:" -ForegroundColor Cyan
$os = Get-CimInstance Win32_OperatingSystem
$freeMemory = [math]::Round($os.FreePhysicalMemory/1024/1024, 2)
$usedMemory = $totalMemory - $freeMemory
$usagePercent = [math]::Round(($usedMemory / $totalMemory) * 100, 2)
Write-Host "已使用: ${usedMemory}GB ($usagePercent%)"
Write-Host "可用: ${freeMemory}GB"
批处理脚本 (CMD)
@echo off内存清理工具 color 0A echo ======================================== echo Windows 内存缓存清理工具 echo ======================================== echo. echo 1. 清理前内存状态: systeminfo | findstr /C:"可用物理内存" echo. echo 2. 正在清理系统缓存... :: 清空DNS缓存 ipconfig /flushdns >nul 2>&1 echo - DNS缓存已清理 :: 清空预读取文件 del /f /s /q "%windir%\Prefetch\*" >nul 2>&1 echo - 预读取文件已清理 :: 清空临时文件 del /f /s /q "%temp%\*" >nul 2>&1 echo - 临时文件已清理 echo. echo 3. 清理完成! echo. echo 4. 清理后内存状态: systeminfo | findstr /C:"可用物理内存" echo. pause
安全建议和注意事项
使用前检查清单
#!/bin/bash
# 安全检查脚本 pre_clear_check.sh
echo "=== 缓存清理前安全检查 ==="
# 检查1:确认是否需要清理
echo "检查1: 确认当前内存状况"
free -h
echo ""
# 检查2:检查重要进程
echo "检查2: 检查关键服务"
for service in mysql nginx apache2 redis; do
if systemctl is-active --quiet $service 2>/dev/null; then
echo " - $service: 运行中"
fi
done
echo ""
# 检查3:确认磁盘使用情况
echo "检查3: 检查磁盘使用"
df -h / | tail -1
echo ""
# 检查4:确认是否有足够的Swap空间
echo "检查4: 检查Swap使用"
swapon --show
echo ""
# 建议
echo "建议:"
echo "- 确保关键数据已持久化"
echo "- 确认应用可以承受缓存丢失"
echo "- 建议在低负载时段执行"
使用方法
Linux 系统
# 1. 赋予执行权限 chmod +x clear_cache.sh # 2. 运行脚本 sudo ./clear_cache.sh # 3. 设置定时任务(可选) crontab -e # 添加以下行(每天凌晨2点执行) 0 2 * * * /path/to/clear_cache.sh
Windows 系统
# 1. 以管理员身份运行 PowerShell # 2. 执行脚本 .\Clear-Cache.ps1 # 3. 设置计划任务(可选) # 使用任务计划程序添加定时任务
注意事项
- 谨慎使用:频繁清理缓存可能影响系统性能
- 权限要求:Linux需root权限,Windows需管理员权限
- 业务影响:清理前确保业务可接受短暂性能波动
- 监控告警:结合监控系统使用,避免过度清理
- 测试环境:先在测试环境验证效果
根据您的具体需求和系统环境选择合适的脚本方案。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播