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