首页主机资讯Swap空间满了怎么清理

Swap空间满了怎么清理

时间2026-01-18 14:50:04发布访客分类主机资讯浏览1467
导读:Linux 中清理 Swap 的安全步骤 一、先判断是否可以安全释放 查看内存与 Swap 使用:运行命令:free -h 或 swapon -s,确认 Swap 已用满且物理内存是否有足够空闲(如可用内存明显大于 Swap 已用量,才适...

Linux 中清理 Swap 的安全步骤

一、先判断是否可以安全释放

  • 查看内存与 Swap 使用:运行命令:free -hswapon -s,确认 Swap 已用满且物理内存是否有足够空闲(如可用内存明显大于 Swap 已用量,才适合执行回收)。
  • 原则:只有当物理内存足以容纳当前被换出的页面时,回收才安全;否则可能引发 OOM(内存溢出) 或严重卡顿。

二、快速释放 Swap 的推荐做法

  • 优雅回收(无需重启):依次执行
    1. sudo swapoff -a(将 Swap 数据迁回内存,过程可能较慢,请耐心等待)
    2. sudo swapon -a(重新启用 Swap)
  • 等待期间可用 free -mswapon -s 观察 Swap 使用是否降到接近 0
  • 重要前提:确保系统空闲内存足以容纳被换出的数据,否则不建议执行此操作。

三、无法一次性回收时的定位与处理

  • 找出占用 Swap 的进程:
    • 按进程汇总:
      for pid in $(ls /proc | grep '^[0-9]');
           do
        if [ -f /proc/$pid/status ];
           then
          swap=$(grep VmSwap /proc/$pid/status 2>
      /dev/null | awk '{
      print $2}
          ')
          if [ -n "$swap" ] &
          &
           [ "$swap" -gt 0 ];
           then
            cmd=$(cat /proc/$pid/cmdline 2>
      /dev/null | tr '\0' ' ')
            echo "PID: $pid, Swap: ${
      swap}
           kB, CMD: $cmd"
          fi
        fi
      done | sort -k5 -nr
      
    • 按进程详细页汇总:
      for i in $(cd /proc;
           ls | grep -E '^[0-9]+');
       do
        awk '/Swap:/{
      a+=$2}
       END{
      printf "%s %.2fM\n", '"$i"', a/1024}
          ' /proc/$i/smaps 2>
          /dev/null
      done | sort -k2 -nr | head
      
  • 处理建议:优先尝试重启占用 Swap 较多的进程以释放其内存;如业务允许,再考虑终止异常进程。一般“释放 Swap”的本质是让相关进程释放内存或重启。

四、释放页缓存以间接帮助回收 Swap(可选)

  • 执行:sudo sync & & echo 3 | sudo tee /proc/sys/vm/drop_caches
  • 作用:清理页缓存、目录项和 inode,释放更多物理内存,从而让系统更容易把页面从 Swap 换回。注意这并非直接“清理 Swap”,而是为回收创造条件。

五、中长期优化与扩容

  • 降低系统对 Swap 的依赖:临时设置 vm.swappiness=10(默认通常为 60),减少换出倾向:
    • 临时:sudo sysctl vm.swappiness=10
    • 永久:在 /etc/sysctl.conf 中添加 vm.swappiness=10 并执行 sudo sysctl -p
  • 扩容或调整 Swap:
    • 新增 Swap 文件:
      sudo fallocate -l 2G /swapfile
      sudo chmod 600 /swapfile
      sudo mkswap /swapfile
      sudo swapon /swapfile
      echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
      
    • 如需减少/移除 Swap,先禁用(swapoff),再删除对应文件或在 /etc/fstab 注释条目,必要时用 mkswap/swapon 重建或重新启用。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Swap空间满了怎么清理
本文地址: https://pptw.com/jishu/784400.html
ubuntu cpustat怎样分析数据 ubuntu缓存如何处理大文件传输

游客 回复需填写必要信息