优化小内存服务器性能:调整 Linux Swappiness 实战记录

社区话题 bbPress 论坛系统(bbPress Forum System) 优化小内存服务器性能:调整 Linux Swappiness 实战记录

  • 该话题为空。
正在查看 0 条回复
  • 作者
    帖子
    • #1192

      追光
      管理员

      《优化小内存服务器性能:调整 Linux Swappiness 实战记录》,内容涵盖 检测 → 分析 → 修改 → 应用 → 验证 的完整流程。

      环境:Debian 12(内核 6.1.0-37-amd64)
      物理内存:3722 MB
      Swap 分区:1024 MB(已用 522 MB)
      问题现象:系统响应偶有卡顿,free -h 显示 Swap 使用率超 50%

      🔍 一、问题检测:发现 Swap 被频繁使用

      首先通过基础命令确认内存状态:

      bash
      root@NewVFX:~

      free -h

      total used free shared buff/cache available
      Mem: 3.6Gi 3.0Gi 654Mi 120Mi 1.0Gi 1.2Gi
      Swap: 1.0Gi 522Mi 502Mi

      真实使用内存:3068 MB(82%)
      Swap 已用:522 MB(51%)

      💡 虽然 Linux 会利用空闲内存做缓存,但 Swap 被大量使用 通常意味着物理内存不足,系统正在将不活跃页换出到磁盘,这会显著降低 I/O 性能。

      进一步检查内核的 Swap 倾向性参数:

      bash
      root@NewVFX:~

      cat /proc/sys/vm/swappiness

      60

      默认值 60 表示系统较早、较积极地使用 Swap。对于内存仅 3.7GB 的小服务器来说,这显然不够友好。

      🧠 二、原理分析:什么是 swappiness?

      vm.swappiness 是 Linux 内核的一个可调参数,取值范围 0100:
      值越高 → 越倾向于将内存页换出到 Swap
      值越低 → 越倾向于保留内存,即使缓存较少

      | 场景 | 推荐值 |
      | 桌面系统(内存充足) | 60(默认) |
      | 服务器(内存 ≤ 4GB) | 10 |
      | 高性能数据库服务器 | 1 |
      | 完全禁用 Swap(不推荐) | 0 |

      📌 我们的服务器内存小、Swap 已用过半 → 应降低 swappiness,减少不必要的磁盘交换

      ✍️ 三、配置修改:写入 sysctl 配置文件

      1. 编辑 /etc/sysctl.conf

      bash
      nano /etc/sysctl.conf

      在文件末尾添加:

      conf
      Reduce swap aggressiveness for low-memory server (3.7GB RAM)

      vm.swappiness=10

      保存并退出(Ctrl+O → Enter → Ctrl+X)。

      2. 应用新配置(无需重启)

      bash
      sysctl -p

      该命令会重新加载 /etc/sysctl.conf 中的所有设置。

      ✅ 四、验证生效:确认参数已更新

      bash
      root@NewVFX:~

      cat /proc/sys/vm/swappiness

      10

      ✅ 输出为 10,说明配置已生效。

      📊 五、后续观察:监控内存与 Swap 变化

      调整后不会立即清空 Swap,但系统会在内存压力缓解时逐步将 Swap 数据换回内存。

      持续监控命令:

      bash
      每2秒刷新一次内存状态

      watch -n 2 free -h

      重点关注:
      available 列(实际可用内存)
      Swap 使用量是否缓慢下降

      🕒 经过数小时运行,Swap 使用量从 522MB 降至 380MB,系统响应明显更流畅。

      🛠️ 六、补充建议(长期优化)

      1. 排查内存大户:
      bash

      ps aux --sort=-%mem | head -n 10

      2. 限制服务内存(如 PHP-FPM、MySQL):
      MySQL:调低 innodbbufferpoolsize
      PHP-FPM:减少 pm.maxchildren
      3. 考虑升级内存:3.7GB 对现代 Web 服务已显吃紧
      4. 避免盲目清空 Swap:swapoff -a 可能导致 OOM,慎用!

      📝 总结

      通过 检测 → 分析 → 修改 → 应用 → 验证 五步流程,我们成功将 swappiness 从默认的 60 调整为 10,有效减少了小内存服务器对 Swap 的依赖,提升了系统响应速度。

      关键经验:
      Swap 不是“坏东西”,但过早使用 Swap 会拖慢系统。
      合理配置 vm.swappiness,是优化低内存 Linux 服务器的低成本高回报手段。

      日期:2025年9月28日
      适用系统:Debian / Ubuntu / CentOS 等主流 Linux 发行版

正在查看 0 条回复
  • 在下方一键注册,登录后就可以回复啦。