温馨提示×

如何在Debian中进行资源回收

小樊
42
2025-12-14 10:34:30
栏目: 智能运维

Debian资源回收实用指南

一 磁盘空间回收

  • 包管理与缓存
    • 清理 APT 缓存与无用依赖:sudo apt cleansudo apt autocleansudo apt autoremove --purge
    • 移除残留配置(状态为 rc 的包):先查 dpkg -l | awk ‘/^rc/ {print $2}’,再批量清理:sudo apt purge $(dpkg -l | awk ‘/^rc/ {print $2}’)
    • 查找并删除孤儿包:sudo apt install deborphan && deborphan | xargs sudo apt purge -y
  • 日志与临时文件
    • 精简 systemd 日志:sudo journalctl --rotate && sudo journalctl --vacuum-time=7d && sudo journalctl --vacuum-size=100M(可按需改为 1d/50M 等)。
    • 清理临时目录:sudo rm -rf /tmp/ /var/tmp/*(必要时用 tmpwatch/tmpreaper)*。
  • 旧内核清理
    • 查看当前与已安装内核:uname -rdpkg --list | grep linux-image
    • 删除旧版本(示例):sudo apt purge linux-image- linux-headers-;务必保留当前运行内核与最新一个旧版作回退。
  • 大文件与目录定位
    • 快速查看分区占用:df -h;交互式定位大文件/目录:sudo ncdu /(方向键导航,d 删除,q 退出)。
  • Docker 环境
    • 一键清理无用资源:docker system prune -af --volumes(谨慎,会删除停止容器、悬挂镜像、无用网络与卷)。

二 内存资源回收

  • 观察与定位
    • 查看内存与缓存:free -h;实时监控:top/htopvmstatiostat
  • 主动释放 PageCache/Dentry/Inode(仅在必要时)
    • 执行前先同步脏页:sync
    • 释放缓存:echo 1 | sudo tee /proc/sys/vm/drop_caches(仅页缓存)、echo 2 | sudo tee /proc/sys/vm/drop_caches(dentry/inode)、echo 3 | sudo tee /proc/sys/vm/drop_caches(全部)。提示:这只是“释放缓存”,可能短时降低文件系统性能,生产环境慎用。
  • 调整内核回收倾向
    • 降低换页倾向(更倾向保留内存):sudo sysctl vm.swappiness=10(默认通常为 60;数值越小越不积极使用 swap)。
    • 提高 VFS 缓存回收压力:sudo sysctl vm.vfs_cache_pressure=200(默认通常为 100;数值越大越积极回收目录项/索引节点缓存)。
    • 持久化:将上述参数写入 /etc/sysctl.conf/etc/sysctl.d/99-swappiness.conf
  • 进程与服务管理
    • 关闭不必要服务:systemctl list-units --type=service 查看,sudo systemctl stop 停止;必要时禁用开机启动:sudo systemctl disable
  • 重要说明
    • Linux 内核会自动回收内存(kswapd 等机制),多数情况下无需手动清理缓存;仅在出现“缓存占用过高导致 OOM 风险”或“性能诊断需要”时再手动释放。

三 回收策略与自动化

  • 日志与缓存的周期性维护
    • 使用 logrotate 配置日志轮转与保留策略(如按大小/时间切割与压缩),避免 journal 与业务日志无限增长。
  • 定时清理脚本示例(/usr/local/bin/cleanup.sh)
    • 建议先备份并在测试环境验证;以下为示例,可按需调整阈值与保留周期:
      #!/usr/bin/env bash
      set -e
      sync
      echo "==> 清理 APT 缓存与无用依赖"
      sudo apt clean
      sudo apt autoclean
      sudo apt autoremove --purge -y
      
      echo "==> 清理残留配置(rc 状态)"
      sudo apt purge -y $(dpkg -l | awk '/^rc/ {print $2}') 2>/dev/null || true
      
      echo "==> 清理 systemd 日志(保留7天/100M)"
      sudo journalctl --rotate
      sudo journalctl --vacuum-time=7d
      sudo journalctl --vacuum-size=100M
      
      echo "==> 清理临时文件"
      sudo find /tmp -mindepth 1 -mtime +1 -delete 2>/dev/null || true
      sudo find /var/tmp -mindepth 1 -mtime +1 -delete 2>/dev/null || true
      
      echo "==> 清理 Docker 无用资源(谨慎)"
      if command -v docker >/dev/null 2>&1; then
        docker system prune -af --volumes
      fi
      
      echo "==> 空间回收完成"
      df -h
      
    • 加入定时任务(如每周日凌晨 2 点):sudo crontab -e,添加
      0 2 * * 0 /usr/local/bin/cleanup.sh >> /var/log/cleanup.log 2>&1
      
  • 风险提示
    • 清理操作具有数据风险;执行前务必备份重要数据,并在变更窗口内评估对业务的影响。

0