Administrator
Administrator
发布于 2025-04-09 / 11 阅读
0
0

内存交换空间(SWAP)

什么是swap?

linux系统安装过程往往涉及两个分区,一个是根目录/, 另一个就是swap(内存交换空间)。因此,swap空间比较特殊,它实际上是占用磁盘空间的一个分区,而非RAM内存空间。

虽然它是磁盘上的一个分区,但是它不能像根目录那样存储用户文件。它是预留给系统作为内存交换空间用的。

打个比方,一个linux系统运行内存为2G, 内存空间可能在用户大量请求时吃紧,那可能系统就崩溃了,运行内存可是焊死的(对于物理机而言),该如何应付可能高负载呢?答案是创建交换空间(swap),比如在磁盘上创建2G的交换空间。那么在内存吃紧时,系统会将运行内存中暂时用不到的程序和数据挪到swap空间(也就是磁盘上), 腾出的运行内存空间就可以继续造了。

听着像虚拟内存,的确,但是交换空间毕竟还是磁盘空间,IO速度跟物理内存往往差了几个数量级,而且当物理内存用量减小时,swap中的数据会再次被交换到物理内存中。“交换”这个过程,其实也挺费时的。所以:swap空间并不是设置越大越好。

下面记录下swap创建和设置涉及的命令。

创建swap空间

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048  # 创建 2GB 文件
sudo chmod 600 /swapfile                            # 限制权限
sudo mkswap /swapfile                               # 格式化为 Swap
sudo swapon /swapfile                               # 立即启用

使用 swapon --show 查看交换空间:

也可以使用 free -h 查看:

但是上述创建好后如果重启系统,swap不会自动启用,需要再次执行下面命令才能启用swap空间:

swapon /swapfile

如果想一劳永逸,执行下面命令永久生效:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

字段

含义

/swapfile

Swap 文件的路径

none

无挂载点(Swap 不是普通文件系统)

swap

指定类型为 Swap

sw

挂载选项(sw = swap)

0

是否被 dump 备份工具使用(0 = 不备份)

0

是否被 fsck 检查(0 = 不检查)

为什么重启会丢失呢?

这涉及linux启动流程:

  1. 内核加载后,会执行 /sbin/init(或 systemd)。

  2. systemd 会读取 /etc/fstab,并挂载所有列出的文件系统和 Swap。

  3. 如果没有在 /etc/fstab 中定义 Swap,系统 不会自动启用它

更多相关命令

swapoff /swapfile # 关闭swap
watch -n 1 'free -h; sudo vmstat 1'  # 实时查看swap

swap设置多大合适?

Redhat官方的文档中关于swap分区大小设置的建议

物理内存

建议的交换空间大小

如果开启休眠功能建议的交换空间大小

⩽ 2GB

内存的2倍

内存的3倍

> 2GB – 8GB

等于内存大小

内存的2倍

> 8GB – 64GB

至少4G

内存的1.5倍

> 64GB

至少4G

不建议使用休眠

因此,一般来说可以按照如下规则设置swap大小:

4G以内的物理内存,SWAP 设置为内存的2倍,不超过4G。

4-8G的物理内存,SWAP 等于内存大小。

8-64G 的物理内存,SWAP 设置为8G。

64-256G物理内存,SWAP 设置为16G。


评论