Ubuntu操作-08 调整Swap大小

最初安装Ubuntu时,没有手工设置swap,而是通过默认设置的。在使用过程中发现swap控件过小,此处进行次修改。

1 交换分区swap

Linux 的交换分区(swap),或者叫内存置换空间(swap space),是磁盘上的一块区域,可以是一个分区,也可以是一个文件,或者是他们的组合。交换分区的作用是,当系统物理内存吃紧时,Linux 会将内存中不常访问的数据保存到 swap 上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问 swap 上存储的内容时,再将 swap 上的数据加载到内存中,也就是常说的 swap out 和 swap in。

使用 swap 必须要知道它存在的缺点,以便判断何时使用交换分区。使用交换分区的好处当然就是可以一定程度的缓解内存空间紧张的问题。然而,由于 CPU 所读取的数据都来自于内存,交换分区则是存放在磁盘上的,磁盘的速度和内存比较起来慢了好几个数量级,如果不停的读写 swap,那么对系统的性能肯定有影响,尤其是当系统内存很吃紧的时候,读写 swap 空间发生的频率会很高,导致系统运行很慢。

如果使用是桌面系统,由于系统会自动将不常用的内存数据移到 swap 上,对桌面程序来说,有可能会导致最小化一个程序后,再打开时小卡一下,因为需要将 swap 上的数据重新加载到内存中来。在部署了数据库的系统上,也不建议用交换分区,因为频繁地在内存和磁盘上相互导数据会影响数据库性能。

交换分区大小的设置建议值:

  • 内存小于 4GB 时,推荐不少于 2GB 的 swap 空间
  • 内存 4GB~16GB,推荐不少于 4GB 的 swap 空间
  • 内存 16GB~64GB,推荐不少于 8GB 的 swap 空间
  • 内存 64GB~256GB,推荐不少于 16GB 的 swap 空间

2 查看当前swap分区大小

(base) pang@pang-HP:~$ free -m
               total        used        free      shared  buff/cache   available
内存:      15341        7482        2337         223        5521        7308
交换:        975          21         954
(base) pang@pang-HP:~$ 

975MB即为当前swap空间的大小。

使用lsblk命令查看一下当前存储设备情况

(base) pang@pang-HP:~$ lsblk
NAME                MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0                 7:0    0     4K  1 loop /snap/bare/5
loop1                 7:1    0  55.5M  1 loop /snap/core18/2246
loop2                 7:2    0 168.1M  1 loop /snap/postman/149
loop3                 7:3    0  54.2M  1 loop /snap/snap-store/558
loop4                 7:4    0    51M  1 loop /snap/snap-store/547
loop5                 7:5    0  61.8M  1 loop /snap/core20/1169
loop6                 7:6    0 152.3M  1 loop /snap/firefox/701
loop7                 7:7    0  99.3M  1 loop /snap/core/11743
loop8                 7:8    0  99.4M  1 loop /snap/core/11993
loop9                 7:9    0  82.2M  1 loop /snap/rapidsvn-snap/2
loop10                7:10   0 247.9M  1 loop /snap/gnome-3-38-2004/87
loop11                7:11   0 164.8M  1 loop /snap/gnome-3-28-1804/161
loop12                7:12   0   219M  1 loop /snap/gnome-3-34-1804/77
loop13                7:13   0  65.2M  1 loop /snap/gtk-common-themes/1519
loop14                7:14   0  55.5M  1 loop /snap/core18/2253
loop15                7:15   0  61.8M  1 loop /snap/core20/1242
loop16                7:16   0 152.3M  1 loop /snap/firefox/731
loop17                7:17   0 242.3M  1 loop /snap/gnome-3-38-2004/76
loop18                7:18   0   219M  1 loop /snap/gnome-3-34-1804/72
nvme0n1             259:0    0 953.9G  0 disk 
├─nvme0n1p1         259:1    0   512M  0 part /boot/efi
└─nvme0n1p2         259:2    0 953.4G  0 part 
  ├─vgubuntu-root   253:0    0 930.4G  0 lvm  /
  └─vgubuntu-swap_1 253:1    0   976M  0 lvm  
(base) pang@pang-HP:~$ 

3 查看swap分区挂载位置

(base) pang@pang-HP:~$ cat /proc/swaps
Filename                                Type            Size            Used            Priority
/dev/dm-1                               partition       999420          22272           -2
(base) pang@pang-HP:~$ 

4 停止交换分区

(base) pang@pang-HP:~$ sudo swapoff /dev/dm-1
(base) pang@pang-HP:~$ free -m
               total        used        free      shared  buff/cache   available
内存:      15341        7637        2132         252        5571        7125
交换:          0           0           0
(base) pang@pang-HP:~$ cat /proc/swaps
Filename                                Type            Size            Used            Priority
(base) pang@pang-HP:~$ 
(base) pang@pang-HP:~$ ll /dev/dm-1
brw-rw---- 1 root disk 253, 1 12月  6 11:25 /dev/dm-1
(base) pang@pang-HP:~$

swaponswapoff命令分别用于开启或关闭交换空间(包括交换文件和交换分区)。如果需要清空交换空间,可以使用如下方式:

swapoff -a && swapon -a
# -a 参数表示包含 /etc/fstab 文件中所有设置为 swap 的设备

5 删除分区文件

sudo rm /dev/dm-1

6 建立swapfile

这里新建的swap分区是10G,bs x count = 1024 × 10000000 = 10G

(base) pang@pang-HP:~$ sudo mkdir /swap
(base) pang@pang-HP:~$ cd /swap
(base) pang@pang-HP:/swap$ sudo dd if=/dev/zero of=swapfile bs=1024 count=10000000
记录了10000000+0 的读入
记录了10000000+0 的写出
10240000000字节(10 GB,9.5 GiB)已复制,23.0718 s,444 MB/s
(base) pang@pang-HP:/swap$ ll
总用量 10000012
drwxr-xr-x  2 root root        4096 12月  6 11:29 ./
drwxr-xr-x 23 root root        4096 12月  6 11:28 ../
-rw-r--r--  1 root root 10240000000 12月  6 11:27 swapfile

7 使用新分区

如果新建分区文件可以省去给权限和 mkswap -f 的操作。

(base) pang@pang-HP:/swap$ sudo chmod 600 /swap/swapfile 
(base) pang@pang-HP:/swap$ sudo mkswap -f /swap/swapfile 
正在设置交换空间版本 1,大小 = 9.5 GiB (10239995904  个字节)
无标签, UUID=f1ff60a1-0870-434a-8d57-0359c9e68eb8
(base) pang@pang-HP:/swap$ sudo swapon /swap/swapfile

8 查看新swap分区

(base) pang@pang-HP:/swap$ free -m
               total        used        free      shared  buff/cache   available
内存:      15341        7650         199         194        7490        7169
交换:       9765           0        9765
(base) pang@pang-HP:/swap$
(base) pang@pang-HP:/swap$ cat /proc/swaps
Filename                                Type            Size            Used            Priority
/swap/swapfile                          file            9999996         0               -2
(base) pang@pang-HP:/swap$ 

9 永久生效交换分区

修改/etc/fatab文件,修改交换分区路径,具体如图所示。

vi /etc/fstab

(base) pang@pang-HP:~$ cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mapper/vgubuntu-root /               ext4    errors=remount-ro 0       1
# /boot/efi was on /dev/nvme0n1p1 during installation
UUID=6900-518F  /boot/efi       vfat    umask=0077      0       1
/swap/swapfile none            swap    sw              0       0

10 内核参数

内核参数 vm.swappiness 控制换出运行时内存的相对权重,参数值大小对如何使用 swap 分区有很大联系。值越大,表示越积极使用 swap 分区,越小表示越积极使用物理内存。一般系统的默认值 swappiness=60,表示内存使用率超过 100-60=40% 时开始使用交换分区。swappiness=0 的时候表示最大限度使用物理内存,然后才是 swap 空间;swappiness=100 的时候表示积极使用 swap 分区,并把内存上的数据及时搬运到 swap 空间(对于 3.5 以后的内核和 RedHat 2.6.32 之后的内核,设置为 0 会禁止使用 swap,从而引发 out of memory,这种情况可以设置为 1)。查看参数值:

cat /proc/sys/vm/swappiness

临时调整该值:

sysctl vm.swappiness=40

永久调整需编辑 /etc/sysctl.conf 文件,加入如下内容:

vm.swappiness=10

然后加载参数:

sysctl -p
  • 7
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值