Linux-Debian-Ubuntu如何设置或删除swap虚拟内存

虚拟内存 swap 简单的说就是将硬盘当内存用,用于解决内存容量不足的情况。

swap交换空间其实就是硬盘上一个特定的文件,只不过这个文件只有内存在读写。

查看当前系统是否设置了 swap

root@mbapp1a:~# free -m total used free shared buff/cache available Mem: 1982 755 66 2 1160 1040 Swap: 2047 22 2025

如果 swap 栏都是 0 0 0 表示没有设置过。

free 命令显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。

有时我们需要持续的观察内存的状况,此时可以使用 -s 选项并指定间隔的秒数:

$ free -h -s 3

主要命令如下:

sudo dd if=/dev/zero of=swapfile bs=1M count=2048
sudo mkswap swapfile 
sudo chmod 600 swapfile
sudo swapon swapfile 
cat /proc/swaps
swapon -s
sudo swapon --show                    
sudo free -h

如何设置swap?

一般物理内存小于2GB就设置为内存的两倍,小于8GB设置为等于内存,大于8GB的设置小于4GB

1、创建swap文件

格式: sudo dd if=/dev/zero of=swapfile count=4096 bs=1M

ls -al swapfile

# 创建一个 swap 目录,方便管理
mkdir swap
cd swap

# 创建swap文件
sudo dd if=/dev/zero of=swapfile bs=1M count=2048

sudo dd if=/dev/zero of=swapfile bs=1M count=4096

# 查看swap文件是否创建好了
ls -al swapfile

count=4096 bs=1M 表示创建 4GB 的虚拟内存,单位是 M

该命令中 count 即代表swap文件大小,我这里设置的是2Gb,你可以换成自己想设置的大小

$ sudo dd if=/dev/zero of=swapfile bs=1M count=2048 2048+0 records in 2048+0 records out 2147483648 bytes (2.1 GB, 2.0 GiB) copied, 18.5132 s, 116 MB/s

dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

参数注释:

if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file > of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file > bs=bytes:同时设置读入/输出的块大小为bytes个字节。

count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。

3、激活 Swap 文件

mkswap 命令,用于在一个文件或者设备上建立交换分区。

sudo mkswap swapfile Setting up swapspace version 1, size = 2 GiB (2147479552 bytes) no label, UUID=1fd2cb84-ae10-4ef0-9ec3-13059528f395

使用 swapon 命令激活交换文件:

sudo swapon swapfile swapon: /root/swap/swapfile: insecure permissions 0644, 0600 suggested. swapon: /root/swap/swapfile: read swap header failed

$ ls -al total 2097164 drwxr-xr-x 2 root root 4096 Jun 22 20:31 . drwx------ 7 root root 4096 Jun 22 20:30 .. -rw-r--r-- 1 root root 2147483648 Jun 22 20:31 swapfile

$ sudo chmod 600 swapfile

$ sudo mkswap swapfile mkswap: /swapfile: warning: wiping old swap signature. Setting up swapspace version 1, size = 947.2 MiB (993243136 bytes) no label, UUID=383a444c-3a78-45b6-91a2-4f8df078689d

  1. 查看现有的swap
root@mbapp1a:~# cat /proc/swaps
Filename                Type        Size        Used        Priority
/root/swapfile                          file        2097148     22784       -2

root@mbapp1a:~# swapon -s
Filename                Type        Size    Used    Priority
/root/swapfile                          file        2097148 22784   -2

sudo swapon --show

root@mbapp1a:~# sudo swapon --show  
NAME           TYPE SIZE  USED PRIO
/root/swapfile file   2G 22.3M   -2

使用 free -h 命令查看:

root@mbapp1a:~# free -h
               total        used        free      shared  buff/cache   available
Mem:           1.9Gi       753Mi        82Mi       2.0Mi       1.1Gi       1.0Gi
Swap:          2.0Gi        22Mi       2.0Gi

设置系统启动时自动开启 Swap

修改 /etc/fstab 文件:

# 编辑fsta文件
$ sudo vim /etc/fstab

# 在最后添加
/swapfile none swap sw 0 0

# 保存文件(:wq)

如何删除swap?

首先输入以下命令停用 SWAP 空间:

sudo swapoff -v swapfile

在 /etc/fstab 文件中删除有效 swap 的行

最后执行以下命令删除 swapfile 文件:

sudo rm swapfile

可以使用 top 命令查看运行情况

root@mbapp1a:~# top

top - 23:31:13 up 7 days, 23:53,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 110 total,   1 running, 109 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.5 sy,  0.0 ni, 99.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1982.1 total,     81.6 free,    753.4 used,   1147.1 buff/cache
MiB Swap:   2048.0 total,   2025.7 free,     22.2 used.   1043.4 avail Mem 
 PID USER  PR  NI    VIRT    RES    SHR S  %CPU  %MEM  TIME+ COMMAND                                                                  
   5533 root  20   0 1033224  66000  11520 S   0.7   3.3 119:34.35 YDService
   9 root     20   0 1305080  17772   4404 S   0.3   0.9   2:30.60 YDLive