mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
565 字
2 分钟
为什么 Linux 需要 Swapping
2023-11-06

Linux 系统会在物理内存不足时,将部分内存数据交换到磁盘。这个过程称为 Swapping。为什么 Linux 需要 Swapping?

一、什么是 Swapping#

1.1 Swapping 的概念#

flowchart LR subgraph 物理内存 A[活动进程] B[缓存数据] C[空闲内存] end subgraph 磁盘 S[Swap 空间<br/>交换分区/文件] end A -->|内存压力| S S -->|恢复| A Note: 当物理内存不足时<br/>将不活跃页面换出到磁盘

1.2 Swapping 的触发条件#

# 查看 swap 使用
free -h
# total used free
# Mem: 31Gi 28Gi 2.7Gi
# Swap: 2Gi 156Mi 1.9Gi
# 查看 swapiness 参数
cat /proc/sys/vm/swappiness
# 60

二、为什么需要 Swapping#

2.1 内存超量使用(Overcommit)#

# 进程申请内存不一定立即使用
# 这是内存分配的正常行为
process = malloc(1GB) # 申请 1GB
# 实际使用可能只有 100MB
# 如果没有 swap,系统会 OOM
# 有了 swap,可以等实际使用时再分配

2.2 保护 OOM Killer#

flowchart LR subgraph 没有 swap M[内存耗尽] --> O[OOM Killer] O --> K[杀死进程] end subgraph 有 swap M2[内存压力] --> S[换出到 swap] S --> R[内存释放] R --> N[正常继续] end

没有 swap 时:内存耗尽 → OOM Killer 直接杀死进程 有 swap 时:内存压力 → 先尝试换出 → 给进程机会清理

2.3 内存碎片整理#

flowchart LR subgraph 内存碎片 A[进程 A: 100MB] G[间隙] B[进程 B: 50MB] G2[间隙] C[进程 C: 200MB] end Note: 需要连续大内存块时<br/>通过 swap 整理

三、Swapping 的工作原理#

3.1 页面回收(Page Reclaim)#

flowchart TB subgraph 页面类型 F[File-backed 页<br/>文件缓存] A[Anonymous 页<br/>进程内存] end subgraph 回收策略 F -->|可以直接释放| FC[释放] F -->|可以写回磁盘| FW[写回后释放] A -->|换出到 swap| SW[swap out] end

3.2 LRU 列表#

flowchart LR subgraph LRU (最近最少使用) LRU[LRU 列表] LRU -->|最不活跃| L[换出候选] LRU -->|最活跃| H[保持内存] end

Linux 使用 LRU(Least Recently Used)算法决定哪些页面应该被换出。

四、swappiness 参数#

4.1 swappiness 的含义#

# swappiness 范围: 0-100
# 0: 尽量不使用 swap,除非内存快耗尽
# 100: 积极使用 swap
cat /proc/sys/vm/swappiness
# 60 (默认)
swappiness行为
0几乎不用 swap,保护进程内存
60平衡策略
100优先换出内存

4.2 推荐的 swappiness#

场景推荐值原因
数据库服务器10-30内存大,避免 swap 影响性能
通用桌面60平衡
内存紧张较高需要 swap 保护
# 临时修改
sysctl vm.swappiness=10
# 永久修改
echo "vm.swappiness=10" >> /etc/sysctl.conf

五、Swapping 的性能影响#

5.1 Swap 性能问题#

# 如果大量 swap 活动,说明内存不足
vmstat 1
# procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
# 1 0 0 2000000 50000 300000 0 0 0 0 100 200 10 5 85 0 0
# si/so 列显示 swap 活动
# 如果持续不为 0,说明内存不足

5.2 判断是否需要更多内存#

指标说明
si 持续不为 0正在从 swap 换入,需要更多内存
so 持续不为 0正在换出到 swap,内存不足
available 很小实际可用内存不足

六、Swap 配置建议#

6.1 Swap 大小#

内存大小建议 swap 大小
< 2GB2x RAM
2-8GB= RAM
8-64GB至少 4GB
> 64GB至少 4GB

6.2 Swap 位置#

# 使用 SSD 作为 swap
# SSD 的 swap 性能比 HDD 高 100 倍
# 创建 swap 文件
fallocate -l 8G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

七、总结#

7.1 Linux 需要 Swapping 的原因#

原因说明
内存超量使用进程申请的内存不一定立即使用
保护进程避免 OOM Killer 直接杀死进程
内存碎片整理需要连续大内存块时换出页面
休眠支持支持系统休眠需要 swap

7.2 swappiness 调整指南#

场景swappiness
MySQL/PostgreSQL10-30
通用服务器60
内存紧张较高

核心观点:Swapping 是 Linux 内存管理的重要组成部分,它提供了内存超量使用的能力,保护系统免受 OOM 的影响。但过多的 swap 会严重影响性能,需要根据场景合理配置。

参考资料#

支持与分享

如果这篇文章对你有帮助,欢迎支持作者或分享给更多人

为什么 Linux 需要 Swapping
https://blog.souloss.com/posts/why-the-design/why-linux-needs-swapping/
作者
Souloss
发布于
2023-11-06
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时