IT 相关 · 2023 年 10 月 6 日

Linux swap 虚拟内存的创建使用

概述

在 Linux 系统中,「swap」 的全称是 「swap space」,即交换空间。它是一种虚拟内存空间,用于在物理内存不足时,将部分暂时不用的内存数据交换到磁盘上,以释放物理内存供其它进程使用。交换空间可以是专门的交换分区 (swap partition),也可以是交换文件 (swap file) 。 swap 又常被称为虚拟内存和交换分区。当内存不足时可通过创建 swap 释放内存,支持创建多个 swap,因此当创建的 swap 使用率较高时也可以新增 swap 达到扩容的目的。

创建 swap

1. 查看当前系统 Swap 空间

# free -mh
              total        used        free      shared  buff/cache   available
Mem:           31Gi        21Gi       414Mi        69Mi       9.0Gi       8.9Gi
Swap:          15Gi        15Gi       723Mi

2. 创建 Swap 目录

# cd /usr
# mkdir swap

3. 增加 Swap 文件

# dd if=/dev/zero of=/usr/swap/swapfile1 bs=1M count=16384
16384+0 records in
16384+0 records out
17179869184 bytes (17 GB, 16 GiB) copied, 32.0021 s, 537 MB/s

bs=1M 表示写入的每个块的大小为 1M,count=16384 表示创建大小为 16384M(16GB) 的 Swap 文件

4. 查看创建的 Swap 文件

# du -sh /usr/swap/swapfile1
16G     /usr/swap/swapfile1

5. 将目标文件标识为 Swap 分区文件

# mkswap /usr/swap/swapfile1
mkswap: /usr/swap/swapfile1: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 16 GiB (17179865088 bytes)
no label, UUID=386dee2a-bca6-4ca4-a943-5f01aeba9f70

6. 激活 swap 文件

# swapon /usr/swap/swapfile1
swapon: /usr/swap/swapfile1: insecure permissions 0644, 0600 suggested.

7. 编辑 /etc/fstab 文件

vim /etc/fstab

在末行增加以下内容

/usr/swap/swapfile1 swap swap defaults 0 0

8. 查看是否挂载成功

# swapon -s
Filename                                Type            Size            Used            Priority
/dev/dm-1                               partition       16506876        15748892        -2
/usr/swap/swapfile1                     file            16777212        0               -3

显示挂载成功后大约在几分钟后在探针中显现,显现后效果如图

创建新增的swap文件后在探针显示效果
创建新增的swap文件后在探针显示效果

修改 swap 文件权限

在创建 swap 进行第 5 、 6 步时有提示建议将 swap 文件权限修改为 0600,交换文件 (swap file) 包含系统内存交换的数据,可能包含敏感信息,设置严格的权限可以提高安全性,除此外不修改不会在使用上有任何影响。

chmod 0600 /usr/swap/swapfile1

调整系统使用 swap 的倾向性

要调整系统如何使用 Swap,可修改内核参数 vm.swappiness ,参数取值范围 0 到 100,具体含义如下:

  • 值越大:表示系统越倾向于使用交换空间 (swap),即将内存中不常用的页面 (如进程的非活动数据) 移到磁盘的交换分区中,从而释放内存供其他进程使用。
  • 值越小:表示系统越倾向于保留物理内存中的数据,尽量减少使用交换空间。

一般取值为 60,该值平衡了内存使用和性能,适合大多数场景,尽量避免频繁的磁盘 I/O 。

查看该值命令: cat /proc/sys/vm/swappiness

修改该值可编辑 /etc/sysctl.conf 文件,修改或添加 vm.swappiness 参数,如:

vm.swappiness=60

编辑完运行 sysctl -p 使之生效。

参考链接:https://timberkito.com/?p=98