教程笔记

Linux服务器2G的内存不够用?

较为低配的服务器"内存不足"是每个服务器管理员都可能遇到的噩梦。当应用突然需要更多内存,或者系统负载激增时,物理内存(RAM)很快就会被耗尽,导致系统性能急剧下降,甚至触发OOM(Out of Memory)杀手进程,强制终止重要应用程序。

这时,Swap空间就像是一个应急的"安全气囊"——它不是真正的物理内存,而是硬盘上预留的一块特殊区域,用于在内存不足时临时存储不活跃的内存页。虽然Swap的读写速度远不及RAM(特别是使用传统机械硬盘时),但它能有效防止系统因内存耗尽而崩溃,为争取解决问题的时间。

本教程将介绍Swap的工作原理、配置方法和优化技巧:

为服务器建立Swap

合理调整现有Swap空间大小

优化Swap使用策略以平衡性能与稳定性

监控Swap使用情况,及时发现内存问题

无论是管理生产环境的系统管理员,还是希望优化个人Linux设备的开发者,掌握Swap管理都是必备技能。让我们开始吧!

什么是 Swap?

Swap(交换空间)是 Linux 系统中的一种虚拟内存技术,当物理内存(RAM)不足时,系统会将部分内存中的数据暂时存储到硬盘上的 Swap 分区或 Swap 文件中,以释放 RAM 空间供其他进程使用。

检查当前 Swap 使用情况

在开始管理 Swap 之前,先检查系统当前的 Swap 状态:

sudo swapon --show
free -h
cat /proc/swaps

这些命令将显示:

创建 Swap 文件(无 Swap 分区时)

如果系统没有 Swap 分区,可以创建 Swap 文件:

  1. 创建一个空文件(这里创建 4GB 的 Swap 文件):
sudo fallocate -l 4G /swapfile

如果 fallocate 不可用,可以使用:

sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
  1. 设置正确的权限:
sudo chmod 600 /swapfile
  1. 格式化为 Swap 文件:
sudo mkswap /swapfile
  1. 启用 Swap 文件:
sudo swapon /swapfile
  1. 使配置永久生效(系统重启后自动挂载):
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

调整 Swap 使用倾向

Linux 内核参数 swappiness 控制系统使用 Swap 的倾向,值范围 0-100:

查看当前值:

cat /proc/sys/vm/swappiness

临时修改(重启后失效):

sudo sysctl vm.swappiness=10

永久修改:

echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

调整 Swap 空间大小

增加 Swap 空间

  1. 禁用当前 Swap:
sudo swapoff /swapfile
  1. 调整文件大小(例如增加到 8GB):
sudo fallocate -l 8G /swapfile
  1. 重新格式化和启用:
sudo mkswap /swapfile
sudo swapon /swapfile

减少 Swap 空间

  1. 禁用 Swap:
sudo swapoff /swapfile
  1. 缩小文件(例如减少到 2GB):
sudo truncate -s 2G /swapfile
  1. 重新格式化和启用:
sudo mkswap /swapfile
sudo swapon /swapfile

删除 Swap 文件

如果不再需要 Swap 文件:

  1. 禁用 Swap:
sudo swapoff /swapfile
  1. /etc/fstab 中删除相关行
  2. 删除文件:
sudo rm /swapfile

使用多个 Swap 区域

系统可以同时使用多个 Swap 分区或文件:

sudo swapon /swapfile1
sudo swapon /swapfile2

查看所有活动的 Swap 区域:

swapon --show

性能优化建议

  1. SSD vs HDD:Swap 在 SSD 上性能更好,但会消耗 SSD 寿命
  2. Swappiness 值:服务器建议 10-30,桌面系统可稍高
  3. Swap 大小

    • 内存 < 2GB:Swap = 2倍内存
    • 内存 2-8GB:Swap = 等于内存
    • 内存 > 8GB:Swap = 0.5倍内存或更少
  4. 监控:定期检查 Swap 使用情况,频繁使用 Swap 可能表明需要增加内存

监控 Swap 使用

# 实时监控
watch -n 1 free -h

# 查看 Swap 使用详情
vmstat 1 5

# 查看哪些进程使用了 Swap
sudo smem --sort swap

Linux 系统中的 Swap 空间,根据实际需求调整其大小和使用策略。


Linux Swap 性能影响与使用建议

Swap 的性能代价:为什么过度使用会很糟糕?

Swap 虽然可以防止内存耗尽导致系统崩溃,但它是以严重牺牲性能为代价的。以下是关键的性能问题:

1. Swap 的读取速度 vs. RAM(对比悬殊)

存储类型典型延迟典型带宽适用场景
RAM (DDR4)~100 ns20-50 GB/s高速计算、缓存
NVMe SSD (Swap)~50-100 μs2-5 GB/s紧急内存扩展(仍有性能下降)
SATA SSD (Swap)~100-200 μs0.5-1 GB/s勉强可用,但影响明显
HDD (Swap)~5-10 ms50-200 MB/s极端情况才用,否则系统几乎卡死

实际影响:


2. 典型问题场景:Swap 导致的性能灾难

案例 1:数据库服务器因 Swap 崩溃

案例 2:Java 应用因 Swap 停顿

案例 3:Kubernetes 节点因 Swap 被驱逐


3. 什么时候该用 Swap?什么时候该避免?

✅ 适合使用 Swap 的场景

❌ 应避免 Swap 的场景


4. 最佳实践:如何减少 Swap 的性能影响?

  1. 优先加内存:Swap 是应急方案,不是 RAM 的替代品。
  2. 使用 SSD/NVMe Swap(避免 HDD):至少比机械硬盘快 100 倍。
  3. 调整 vm.swappiness(建议 1-10):减少内核主动使用 Swap 的倾向。
  4. 监控 Swap 使用(如 vmstat 1sar -S 1):发现异常时及时扩容或优化应用。
  5. 关键服务限制内存cgroupsdocker --memory):防止单个进程耗尽内存触发 Swap。

Swap 是最后的保险,不是解决方案

Swap 可以防止系统崩溃,但无法提供良好性能

合理使用 Swap,但永远不要依赖它! 🚀

本文著作权归作者 [ 老朝奉 ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。

发表留言