【网络运维】Linux:Swap 交换空间

发布于:2025-08-05 ⋅ 阅读:(16) ⋅ 点赞:(0)

Linux 交换空间管理

计算机存储器的层次结构

计算机存储器速度越快,成本较高。 为了获得好的性能/价格比,计算机中各种存储器组成一个层状的塔式结构,取长补短,协调工作。
在这里插入图片描述

  • CPU 寄存器,是 CPU 内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果以及一些 CPU 运行需要的信息。

  • CPU 高速缓存,也就是CPU Cache,是一种容量小、速度快的高缓冲存储器,由SRAM组成,直接制作在CPU芯片内,速度几乎与CPU一样快。在金字塔式存储体系中它位于自顶向下的第二层,仅次于CPU寄存器。其容量远小于内存,但速度却可以接近处理器的频率。

  • 主存储器(Main memory),简称主存或内存,其作用是存放指令和数据,并能由中央处理器(CPU)直接随机存取。主存储器速度比CPU高速缓存慢,但存储容器却大的多。

    主存储器的速度一般用存取时间衡量,即每次与CPU间数据处理耗费的时间,以纳秒(ns)为单位。大多数SDRAM内存芯片的存取时间为5、6、7、8或10ns。

    主存储器的带宽计算公式:带宽=频率*位宽/8。

    例如:DDR4 内存频率是3600 MHz,在64位系统(双通道位宽为128,以此类推),1B=8bit,

    • 单通道 DDR4-3600:3600MHz * 64bit / 8=28800MB/S

    • 双通道 DDR4-3600:3600MHz * 64bit * 2 / 8=57600MB/S

  • 辅助存储器,速度慢的多,优点是容量大,可持久化存储。

计算机存储器的工作原理

在这里插入图片描述

  1. CPU运行程序时,先从寄存器中读取数据。如果在寄存器中可以找到数据,则直接从寄存器中读取。如果在寄存器中找不到数据,则从CPU Cache中读取数据,并将数据缓存在CPU Cache中。
  2. 如果在CPU cache中可以找到数据,则直接从CPU Cache中读取。如果在CPU cache中找不到数据,则从主存储器(内存)中读取数据,将数据缓存在主存储器中。
  3. 如果在内存中可以找到数据,则直接从内存中读取。如果在内存中找不到数据,则从辅助存储器中读取数据,例如机械磁盘、光盘、U盘等,并将数据缓存在内存中。

物理内存

计算机系统将内存划分为固定大小的块,称为 page,标准 page 大小为 4 KiB。进程并不直接对物理内存寻址,每个进程具有虚拟地址空间virtual address space。当进程请求内存时,MMU 将进程获得的虚拟地址(VA,Virtual Address )映射到物理地址(PA,Physical Address )。

MMU是Memory Management Unit的缩写,即内存管理单元,它是CPU中用来管理虚拟存储器、物理存储器的控制线路,负责将虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权。

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

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

Swap 空间

Swap,意思是“交换”、“实物交易”。Linux Swap(交换)空间是受Linux内核内存子系统控制的磁盘区域。

  • 功能1:当内存使用量超过定义的限制时,内核寻找已分配给进程但空闲的内存页,将该空闲的内存页写入到交换空间,并向其他进程重新分配RAM页面。
  • 功能2:如果某个程序需要访问磁盘上的页面,则内核会找到另一个空闲的内存页, 将其写入到磁盘,然后从交换区重新调用所需的页面。
  • 功能3:如果某个程序需要访问数据,访问的数据存放在交换空间,则该程序直接从交换空间读取数据,而不需要从磁盘原始位置读取,进而提高速度。

在这里插入图片描述
简单地说,Linux Swap 空间就是在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行,和Windows的虚拟内存(pagefile.sys)的作用是一样的。

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

查看内存
# 默认单位是KiB,使用-m选项,以MiB为单位
[root@server-tpl ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3770         234        3202          11         334        3303
Swap:          3967           0        3967

输出说明:

  • 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量。

创建交换空间
# 使用parted创建所需大小的分区并将其文件系统类型设置为linux-swap
[root@server-tpl ~]# parted /dev/sdb mklabel gpt
[root@server-tpl ~]# parted /dev/sdb unit MiB mkpart data01 linux-swap 1 2049
[root@server-tpl ~]# parted /dev/sdb unit MiB print

# 格式化swap空间
[root@server-tpl ~]# mkswap /dev/sdb1
正在设置交换空间版本 1,大小 = 2097148 KiB
无标签,UUID=e4b9229e-b1b1-4808-b704-9536f5eb501d
激活 swap 空间
# 激活swap空间
[root@server-tpl ~]# swapon /dev/sdb1

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

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

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

示例:

[root@server-tpl ~]# swapon -p 4 /dev/sdb1
# swapon失败需要先取消激活
取消 swap 空间激活
[root@server-tpl ~]# swapoff /dev/sdb1
[root@server-tpl ~]# swapon -s
文件名				      类型		大小	  已用	权限
/dev/dm-1               partition	4063228	0	    -2
持久化激活 swap 空间

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

UUID=e4b9229e-b1b1-4808-b704-9536f5eb501d swap swap pri=4 0 0

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

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

[root@server-tpl ~]# swapon -a
[root@server-tpl ~]# swapon -s
Filename				Type		Size	Used	Priority
/dev/dm-1               partition	4063228	0	    -2
/dev/sdb1               partition	2097148	0	    -3

[root@server-tpl ~]# swapoff -a
[root@server-tpl ~]# swapon -s

网站公告

今日签到

点亮在社区的每一天
去签到