Linux的交换区

Linux 交换区(Swap)详解

交换区(Swap)是 Linux 系统用于扩展内存的一种机制,它将部分磁盘空间虚拟成内存使用。当物理内存(RAM)不足时,系统会将不活跃的内存页移动到交换区,从而避免进程因内存不足(OOM)被强制终止。


1. 交换区的作用

  • 扩展可用内存:当 RAM 耗尽时,系统使用 Swap 作为后备存储。
  • 休眠(Hibernate)支持:休眠时,内存数据会保存到 Swap。
  • 减少 OOM 风险:避免系统因内存不足而崩溃。

2. 交换区的类型

类型说明
Swap 分区独立的磁盘分区(推荐方式,性能较好)
Swap 文件普通文件模拟的交换区(灵活,无需重新分区)
ZRAM基于内存的压缩交换(适用于内存较小设备,如嵌入式系统)

3. 查看当前交换区

free -h              # 查看内存和 Swap 使用情况
swapon --show        # 查看活跃的 Swap 设备
cat /proc/swaps      # 查看 Swap 详细信息

输出示例

              total        used        free      shared  buff/cache   available
Mem:           7.7G        2.1G        3.2G        345M        2.4G        5.0G
Swap:          2.0G        0B          2.0G

4. 创建交换区

(1) 创建 Swap 文件(推荐)

# 1. 创建空文件(大小 4GB)
sudo fallocate -l 4G /swapfile

# 2. 设置权限(仅 root 可读写)
sudo chmod 600 /swapfile

# 3. 格式化为 Swap
sudo mkswap /swapfile

# 4. 启用 Swap
sudo swapon /swapfile

# 5. 永久生效(写入 /etc/fstab)
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

(2) 创建 Swap 分区

# 1. 使用 fdisk/gdisk 创建新分区(类型为 Linux Swap)
# 2. 格式化
sudo mkswap /dev/sdXN   # 替换为实际分区(如 /dev/sdb1)

# 3. 启用
sudo swapon /dev/sdXN

# 4. 写入 /etc/fstab
echo '/dev/sdXN none swap sw 0 0' | sudo tee -a /etc/fstab

5. 调整交换区使用策略

Linux 通过 swappiness 控制 Swap 使用频率(范围 0-100):

  • 0:尽量不使用 Swap(除非内存耗尽)。
  • 100:积极使用 Swap(可能降低性能)。

查看当前值

cat /proc/sys/vm/swappiness

临时修改

sudo sysctl vm.swappiness=10

永久修改

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

6. 删除交换区

(1) 禁用 Swap 文件

sudo swapoff /swapfile
sudo rm /swapfile
sudo sed -i '/\/swapfile/d' /etc/fstab

(2) 禁用 Swap 分区

sudo swapoff /dev/sdXN
sudo sed -i '/\/dev\/sdXN/d' /etc/fstab

7. 交换区大小建议

物理内存(RAM)推荐 Swap 大小
≤ 2GBRAM × 2
2GB–8GB等于 RAM 大小
8GB–64GBRAM × 0.5(至少 4GB)
≥ 64GB4GB(或不用 Swap)

8. 性能优化

  • 优先使用 Swap 分区(比文件性能高 5%~10%)。
  • SSD 比 HDD 更适合 Swap(减少延迟)。
  • 避免过度使用 Swap(频繁交换会拖慢系统)。

9. 常见问题

(1) Swap 使用率过高

  • 原因:物理内存不足,系统频繁换页。
  • 解决:增加 RAM 或优化应用内存占用。

(2) 休眠(Hibernate)失败

  • 原因:Swap 空间小于 RAM。
  • 解决:确保 Swap ≥ RAM 大小。

(3) swapon 报错 “invalid argument”

  • 原因:Swap 文件未正确格式化。
  • 解决:重新运行 mkswap

10. 总结

操作命令
创建 Swap 文件fallocate → mkswap → swapon
启用现有 Swapswapon /swapfile
禁用 Swapswapoff /swapfile
调整 swappinesssysctl vm.swappiness=10

合理配置 Swap 可提升系统稳定性,但不能替代物理内存! 🚀

### 查看和管理 Linux 系统中的交换(Swap) #### 查看当前交换的使用情况 在 Linux 系统中,可以使用以下命令来查看交换的使用情况: - 使用 `free` 命令显示系统的内存和交换使用情况: ```bash free -h ``` 该命令会以人类可读的格式(如 GB 或 MB)显示内存和交换的总量、已用和剩余量[^2]。 - 使用 `swapon` 命令查看当前启用的交换及其状态: ```bash swapon --show ``` 此命令将列出所有正在使用的交换交换文件,以及它们的类型、大小和优先级等信息。 #### 检查各进程的 Swap 使用情况 要检查系统中每个进程的 Swap 使用情况,可以使用以下方法: - 在基于 RHEL 7 的系统中,可以通过 `top` 命令进行交互式排序。首先运行 `top` 命令,然后按 `f` 键选择字段,通过方向键将光标移动到 `SWAP` 字段并按空格选中,之后按 `s` 键根据 Swap 使用情况进行排序[^3]。 - 对于其他发行版,也可以直接使用 `ps` 命令结合 `awk` 来统计各个进程的 Swap 使用情况: ```bash ps aux --sort -rss | awk '{if($NF~/^[0-9]+k?$/)sum+=$6}END{print sum/1024" MB"}' ``` 此命令将按照内存占用对进程排序,并计算总的 Swap 使用量[^3]。 #### 配置和管理交换 - 创建新的交换交换文件时,需要先初始化为交换空间。例如,如果创建了一个新的设备 `/dev/sdn`,则需要使用 `mkswap` 命令对其进行初始化: ```bash sudo mkswap /dev/sdn ``` 这是因为交换不像普通文件系统那样需要挂载到某个目录上,因此它没有默认的标签或 UUID,必须通过初始化才能被识别和使用[^1]。 - 启用新创建的交换空间: ```bash sudo swapon /dev/sdn ``` 这条命令将立即激活指定的交换或文件[^1]。 - 若要让交换空间在系统重启后仍然可用,需将其添加到 `/etc/fstab` 文件中: ```bash /dev/sdn none swap sw 0 0 ``` 这样可以确保系统启动时自动加载交换空间。 - 禁用交换: 如果需要临时禁用某个交换或文件,可以使用以下命令: ```bash sudo swapoff /dev/sdn ``` 这将停止使用指定的交换空间,直到重新启用或系统重启。 #### 交换的优点与缺点 交换的主要优点包括提高系统稳定性以及扩展物理内存容量,使得系统能够运行更多的应用程序和进程[^2]。然而,它的缺点也很明显,比如性能下降和磁盘空间占用等问题,特别是在频繁发生内存与磁盘之间数据交换的情况下[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思静鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值