27.Linux swap交换空间管理

文章目录

Linux交换空间管理

认识swap交换空间

首先,我们拥有一台电脑,电脑内存(RAM),把这个内存想象成一个办公室的工位,而硬盘相当于一个巨大的档案室。里面的数据存放的特点如下:

工位(内存):

  • 空间有限,但速度快。工作人员(CPU)可以瞬间拿到工位上的任何文件(数据)进行处理
  • 工位是固定的。当需要处理的任务越来越多,文件堆满了所有工位,新任务就没办法开展了

档案室(硬盘):

  • 空间巨大,存放的数据很多,但速度慢。从档案室调取一份文件需要来回跑,花费很长时间。(可以在Windows的文件资源管理器中的搜索试试查找一个文件,一般来说肯定是要等一会才会有结果)
  • 文件可以长期存储

问题来了:如果此时工位堆满了文件,这时候老板突然下发了一个优先级不高但是很占地方的临时任务,工位(内存)满了,怎么办?

swap交换空间就是解决方法:

从档案室(硬盘)里临时划分一部份区域,作为溢出工作区。

  • 将工位上暂时不用的文件打包,贴上标签放到档案室的临时区域
  • 工位上腾出的空间用来存放临时任务的文件
  • 当需要之前打包的文件时,根据标签去档案室取回来即可

计算机内存工作原理也是一样:

  • 工位满了 = 物理内存(RAM)快用完了
  • 档案室里的临时区域 = 硬盘上划出的交换空间(一个特殊的分区或文件)
  • 打包不用的文件放到临时区域 = 操作系统将内存中暂时不活跃的数据"交换"(Swap Out)到硬盘的交换空间里
  • 腾出工位 = 释放出物理内存(RAM)给当前紧急的任务使用
  • 取回文件 = 当需要那些被交换出去的数据时,系统再把它们从交换空间"交换"(Swap In)回内存

**思考:**为什么CPU不直接访问物理地址?

  1. 虚拟内存的容量是物理内存和交换空间的总和,而虚拟地址负责映射到物理内存地址和交换空间地址。
  2. 进程使用内存的过程中,希望内存是连续的。如果进程直接访问物理地址,则内核很难保证进程获得的物理地址空间是连续的,因为进程存在着运行和退出,就会出现内存碎片化。进程的虚拟地址在虚拟内存中是连续的,达到了内存连续的目的,而 MMU 会将进程的虚拟地址映射到物理地址。

**交换空间只是临时的解决办法。**虽然交换空间能够作为"虚拟"内存使用,但由于交换区位于磁盘上,它的速度比物理内存慢的多,因此如果需要更快的速度的话,最好的办法仍然是加大物理内存。

SWAP交换空间

查看内存

bash 复制代码
# 默认单位是KiB,使用-m选项,以MiB为单位
[root@server ~ 16:43:24]# free
              total        used        free      shared  buff/cache   available
Mem:        4026116      215572     3478336       11900      332208     3580652
Swap:       2097148           0     2097148

[root@server ~ 17:28:51]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3931         210        3404          11         316        3496
Swap:          2047           0        2047

输出说明:

  • Mem:

    • total:物理内存空间大小。

    • used:使用的内存 (total - free - buffers - cache)。

    • free:未使用的内存空间大小(真正的空闲,未被任何程序占用)。

    • shared:多个进程共享的内存空间大小。

    • cached:从磁盘读取的数据占用的内存空间大小,待以后使用(数据没有被修改)。

    • buffers:被更改但未写回磁盘的数据占用的内存空间大小。

  • Swap:

    • total:交换空间大小。

    • used:使用的交换空间大小。

    • free:未使用交换空间大小。

Swap 空间大小

管理员应根据系统的内存工作负载来调整交换空间大小。 应用供应商 有时会提供这方面的建议。根据物理内存总量,下表提供了一些指导

物理内存(RAM) 交换空间 允许HIBERNATE时的交换空间
2GiB或以下 两倍的RAM 三倍的RAM
2GiB和8GiB之间 同等的RAM 两倍的RAM
8GiB和64GiB之间 至少4GiB 1.5倍的RAM
64GiB以上 至少4GiB 不建议Hibernate

笔记本电脑和台式机的Hibernate功能会在关闭系统电源之前使用交换空间来保存RAM内容。重新打开系统时, 内核将从交换空间恢复RAM内容,无需完全启动。 对于这些系统而言,交换空间需要超过RAM量。

创建交换空间

bash 复制代码
# 使用parted创建所需大小的分区并将其文件系统类型设置为linux-swap
[root@server ~ 17:32:00]# parted /dev/sdb mklabel gpt
[root@server ~ 17:32:20]# parted /dev/sdb unit mib mkpart swap linux-swap 1 2049
[root@server ~ 17:33:01]# parted /dev/sdb unit mib print                  
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start    End      Size     File system  Name  标志
 1      1.00MiB  2049MiB  2048MiB  xfs          swap

# 格式化swap空间
[root@server ~ 17:33:14]# mkswap /dev/sdb1
mkswap: /dev/sdb1: warning: wiping old xfs signature.
正在设置交换空间版本 1,大小 = 2097148 KiB
无标签,UUID=f5015001-86bb-4cba-ab23-4965aa81647e
[root@server ~ 17:33:36]# parted /dev/sdb unit mib print
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start    End      Size     File system     Name  标志
 1      1.00MiB  2049MiB  2048MiB  linux-swap(v1)  swap

激活 swap 空间

bash 复制代码
# 激活swap空间
[root@server ~ 17:33:44]# swapon /dev/sdb1

# 查看swap设备列表
[root@server ~ 17:35:57]# swapon -s
文件名                          类型            大小    已用    权限
/dev/dm-1                               partition       2097148 0       -2
/dev/sdb1                               partition       2097148 0       -3

默认情况下,多个交换空间具有相同的优先级时,系统会按顺序使用交换空间,即内核先使用第一个已激活交换空间,直至其空间已满,然后开始使用第二个交换空间。在激活交换分区的时候,可以为每个交换空间定义一个优先级,从而强制按该顺序使用交换空间。

swapon 命令使用-p选项指定优先级,优先级介于-1和32767之间,值越大优先级越高。

示例:

bash 复制代码
# 修改优先级前要先把该交换空间停掉
[root@server ~ 17:36:08]# swapon -p 4 /dev/sdb1
[root@server ~ 17:38:14]# swapon -s
文件名                          类型            大小    已用    权限
/dev/dm-1                               partition       2097148 0       -2
/dev/sdb1                               partition       2097148 0       4

取消 swap 空间激活

bash 复制代码
[root@server ~ 17:38:29]# swapoff /dev/sdb1
[root@server ~ 17:38:42]# swapon -s
文件名                          类型            大小    已用    权限
/dev/dm-1                               partition       2097148 0       -2

持久化激活 swap 空间

修改/etc/fstab文件,添加如下类似记录:

复制代码
UUID=f5015001-86bb-4cba-ab23-4965aa81647e swap swap pri=4 0 0

使用命令swapon -a激活/etc/fstab中所有交换设备。

使用命令swapoff -a取消/etc/fstab中所有交换设备激活。

bash 复制代码
[root@server ~ 17:38:49]# swapon -a
[root@server ~ 17:39:52]# swapon -s
文件名                          类型            大小    已用    权限
/dev/dm-1                               partition       2097148 0       -2
/dev/sdb1                               partition       2097148 0       -3

[root@server ~ 17:39:55]# swapoff -a
[root@server ~ 17:40:18]# swapon -s
         partition       2097148 0       -2
/dev/sdb1                               partition       2097148 0       -3

[root@server ~ 17:39:55]# swapoff -a
[root@server ~ 17:40:18]# swapon -s
相关推荐
凭栏落花侧3 小时前
NETSTAT命令详解
运维·服务器·网络
深思慎考3 小时前
LinuxC++项目开发日志——基于正倒排索引的boost搜索引擎(1——项目框架)
linux·c++·搜索引擎
上海云盾第一敬业销售3 小时前
DDOS高防的优点是什么
运维·网络·ddos
xx24063 小时前
随堂笔记2025-925
笔记
The star"'3 小时前
DHC服务器
linux·运维
Janspran3 小时前
嵌入式 - 内核驱动1 - 配置linux驱动
linux·运维·服务器
老黄编程3 小时前
ubuntu 20.04 代号 focal , ubuntu 22.04 代号为 jammy, ubuntu24.04 代号为 noble
linux·运维·ubuntu
陈震_3 小时前
linux系统(ubuntu)安装mysql8详细教程
linux·运维·ubuntu