>운영 및 유지보수 >리눅스 운영 및 유지 관리 >리눅스 스왑 공간의 용도는 무엇입니까?

리눅스 스왑 공간의 용도는 무엇입니까?

藏色散人
藏色散人원래의
2023-03-25 10:35:252073검색

Linux 스왑 공간의 기능은 호스트에서 사용할 수 있는 가상 메모리를 늘리는 것입니다. 스왑 공간은 최신 Linux 시스템의 두 번째 유형의 메모리입니다. 스왑 공간의 주요 기능은 모든 RAM이 점유되고 더 많은 메모리를 사용하는 것입니다. RAM 메모리 대신 공간이 필요합니다.

리눅스 스왑 공간의 용도는 무엇입니까?

이 튜토리얼의 운영 환경: linux5.9.8 시스템, Dell G3 컴퓨터.

리눅스 스왑 공간의 용도는 무엇인가요?

Linux 시스템의 스왑 공간 소개

시스템의 스왑 공간 용량을 수정하는 방법과 필요한 스왑 공간의 양을 알아보세요.

오늘날 어떤 운영 체제라도 Swap공간은 매우 일반적입니다. Linux는 스왑 공간을 사용하여 호스트에서 사용할 수 있는 가상 메모리를 늘립니다. 일반 파일이나 논리 볼륨에서 하나 이상의 전용 스왑 파티션이나 스왑 파일을 사용할 수 있습니다.

일반적인 컴퓨터에는 두 가지 기본 유형의 메모리가 있습니다. 첫 번째 유형인 RAM(Random Access Memory)은 컴퓨터에서 사용되는 데이터와 프로그램을 저장하는 데 사용됩니다. 컴퓨터는 RAM에 저장된 프로그램과 데이터만 사용할 수 있습니다. 랜덤 액세스 메모리는 휘발성 메모리입니다. 즉, 컴퓨터가 꺼지면 RAM에 저장된 데이터가 손실됩니다.

하드 드라이브는 데이터와 프로그램을 장기간 저장하는 데 사용되는 자기 매체입니다. 이 자기 매체는 데이터를 매우 잘 보존할 수 있습니다. 컴퓨터의 전원이 꺼지더라도 디스크에 저장된 데이터는 유지됩니다. CPU(중앙 처리 장치)는 하드 디스크의 프로그램과 데이터에 직접 액세스할 수 없습니다. 먼저 CPU가 코드 명령에 액세스하고 데이터를 조작하는 RAM에 복사해야 합니다. 부팅 프로세스 동안 컴퓨터는 특정 운영 체제 프로그램(예: 커널, init 또는 systemd)과 하드 디스크의 데이터를 RAM에 복사합니다. RAM에서 컴퓨터의 프로세서인 CPU가 데이터에 직접 액세스할 수 있습니다.

스왑 공간

스왑 공간은 최신 Linux 시스템의 두 번째 유형의 메모리입니다. 스왑 공간의 주요 기능은 모든 RAM이 사용되고 더 많은 메모리가 필요할 때 RAM 메모리를 디스크 공간으로 교체하는 것입니다.

예를 들어 RAM이 8GB인 컴퓨터가 있다고 가정해 보겠습니다. 실행하는 프로그램이 RAM을 채우지 않으면 모든 것이 정상이며 스왑이 필요하지 않습니다. 스프레드시트에서 작업하고 있다고 가정해 보겠습니다. 행을 더 추가하면 스프레드시트가 커지고 모든 프로그램이 실행되면서 RAM을 모두 차지하게 됩니다. 현재 사용 가능한 스왑 공간이 없으면 일부 RAM을 확보하기 위해 다른 프로그램을 닫을 때까지 스프레드시트 작업을 중단해야 합니다.

커널은 메모리 관리자를 사용하여 최근에 사용되지 않은 메모리 블록(메모리 페이지)을 감지합니다. 메모리 관리 프로그램은 상대적으로 자주 사용되지 않는 메모리 페이지를 "페이징" 또는 스와핑용으로 지정된 하드 디스크의 특수 파티션으로 스와핑합니다. 이렇게 하면 RAM이 확보되어 스프레드시트에 더 많은 데이터를 입력할 수 있는 공간이 생깁니다. 디스크로 스왑 아웃된 메모리 페이지는 커널의 메모리 관리 코드에 의해 추적되며 필요한 경우 RAM으로 다시 페이징될 수 있습니다.

Linux 컴퓨터의 전체 메모리 양은 RAM + 스왑 파티션이며, 스왑 파티션을 가상 메모리라고 합니다.

Linux 스왑 파티션 유형

Linux는 두 가지 유형의 스왑 공간을 제공합니다. 기본적으로 대부분의 Linux 설치는 스왑 파티션을 생성하지만 특별히 구성된 파일을 스왑 파일로 사용하는 것도 가능합니다. 이름에서 알 수 있듯이 스왑 파티션은 표준 디스크 파티션이며 스왑 공간은 mkswap 명령으로 지정됩니다. mkswap 命令指定交换空间。

如果没有可用磁盘空间来创建新的交换分区,或者卷组中没有空间为交换空间创建逻辑卷,则可以使用交换文件。这只是一个创建好并预分配指定大小的常规文件。然后运行 mkswap 命令将其配置为交换空间。除非绝对必要,否则我不建议使用文件来做交换空间。(LCTT 译注:Ubuntu 近来的版本采用了交换文件而非交换空间,所以我对于这种说法保留看法)

频繁交换

当总虚拟内存(RAM 和交换空间)变得快满时,可能会发生频繁交换。系统花了太多时间在交换空间和 RAM 之间做内存块的页面切换,以至于几乎没有时间用于实际工作。这种情况的典型症状是:系统变得缓慢或完全无反应,硬盘指示灯几乎持续亮起。

使用 free

새 스왑 파티션을 생성할 디스크 여유 공간이 없거나, 볼륨 그룹에 스왑 공간을 위한 논리 볼륨을 생성할 공간이 없는 경우 스왑 파일을 사용할 수 있습니다. 이것은 지정된 크기로 생성되고 사전 할당된 일반 파일입니다. 그런 다음 mkswap 명령을 실행하여 스왑 공간으로 구성하세요. 꼭 필요한 경우가 아니면 스왑 공간으로 파일을 사용하지 않는 것이 좋습니다. (LCTT 번역: 최신 버전의 Ubuntu는 스왑 공간 대신 ​​스왑 파일을 사용하므로 이 진술에 대해서는 의견을 유보합니다)

Frequent swapping🎜🎜

전체 가상 메모리(RAM 및 스왑 공간이 거의 가득 차면 스왑이 자주 발생할 수 있습니다. 시스템은 스왑 공간과 RAM 사이의 메모리 블록을 페이징하는 데 너무 많은 시간을 소비하므로 실제 작업에 소요되는 시간은 거의 없습니다. 이 상태의 일반적인 증상은 다음과 같습니다. 시스템이 느려지거나 전혀 응답하지 않으며, 하드 드라이브 표시등이 거의 지속적으로 켜집니다. 🎜

free 명령을 사용하여 CPU 로드 및 메모리 사용량을 표시하면 CPU 로드가 매우 높아서 숫자의 30~40에 도달할 수 있습니다. 시스템의 CPU 코어 수입니다. 또 다른 상황은 RAM과 스왑 공간이 거의 완전히 할당된 경우입니다. 🎜🎜실제로 SAR(System Activity Report) 데이터를 보면 이러한 내용도 드러날 수 있습니다. 각 시스템에 SAR을 설치하고 이를 데이터 분석에 사용합니다. 🎜

스왑 공간의 정확한 크기는 얼마입니까?

몇 년 전, 하드 드라이브에 할당된 스왑 공간의 크기는 컴퓨터 RAM 크기의 두 배였습니다(물론 대부분의 컴퓨터 RAM이 KB 또는 MB 단위로 측정되던 시절에도 마찬가지였습니다). 따라서 컴퓨터의 RAM이 64KB라면 128KB의 스왑 파티션을 할당해야 합니다. 이 규칙은 당시 RAM 크기가 매우 작았으며 스왑 공간에 2배 이상의 RAM을 할당해도 성능이 향상되지 않았다는 사실을 고려했습니다. 대부분의 시스템은 실제로 유용한 작업을 수행하는 것보다 교체를 위해 두 배 이상의 RAM을 사용하는 데 더 많은 시간을 소비합니다.

RAM은 이제 너무 저렴해서 오늘날 대부분의 컴퓨터에는 기가바이트 RAM이 있습니다. 제가 새로 구입한 컴퓨터는 대부분 최소 8GB RAM을 갖고 있고, 한 대는 32GB RAM을 갖고 있으며, 메인 워크스테이션은 64GB RAM을 갖고 있습니다. 내 기존 컴퓨터에는 4~8GB의 RAM이 있었습니다.

RAM이 많은 컴퓨터를 작동할 때 스왑 공간의 성능 제한 요소는 2배 미만입니다. Fedora 28 온라인 설치 가이드는 스왑 공간 할당에 대한 현재 접근 방식을 정의합니다. 다음은 내 제안입니다.

아래 표에는 시스템의 RAM 용량과 시스템을 최대 절전 모드로 전환하기에 충분한 메모리가 있는지 여부에 따라 스왑 파티션에 권장되는 크기가 나와 있습니다. 권장되는 스왑 파티션 크기는 설치 중에 자동으로 설정됩니다. 그러나 시스템 최대 절전 모드를 충족하려면 사용자 정의 파티션 단계에서 스왑 공간을 편집해야 합니다.

표 1: Fedora 28 문서의 권장 시스템 스왑 공간

시스템 메모리 크기 권장 스왑 공간 권장 스왑 공간 크기(최대 절전 모드 지원) 2GB 미만 RAM 2배 RAM 3배 2GB - 8GB는 다음과 같습니다. RAM 크기 2x RAM 8GB - 64GB 0.5x RAM 1.5x RAM > 64GB 작업 부하 관련 최대 절전 모드는 권장되지 않습니다.

위에 나열된 각 범위 사이의 경계(예: 2GB, 8GB 또는 64GB 시스템 RAM)는 다음과 같이 주의하여 사용하십시오. 선택한 스왑 공간 및 지원되는 최대 절전 모드 기능으로 이동합니다. 시스템 리소스가 허용하는 경우 스왑 공간을 추가하면 성능이 향상될 수 있습니다.

물론 대부분의 Linux 관리자는 얼마나 많은 스왑 공간을 사용해야 하는지에 대한 자신만의 생각을 가지고 있습니다. 아래 표 2에는 다양한 환경에서의 개인적인 경험을 바탕으로 한 권장 사항이 포함되어 있습니다. 이는 귀하에게 적용되지 않을 수도 있지만 표 1과 같이 도움이 될 수 있습니다.

표 2: 작성자가 권장하는 시스템 스왑 공간

RAM 크기 권장 스왑 공간 ≤ 2GB 2 스왑 공간을 더 추가하면 스왑 공간이 거의 완전히 사용되기 전에 잦은 스왑이 발생합니다. 위의 제안에 따라 가능하면 스왑 공간을 추가하는 대신 RAM을 더 추가해야 합니다. 시스템 성능에 영향을 미치는 유사한 상황과 마찬가지로 귀하에게 가장 적합한 권장 사항을 사용하십시오. Linux 환경의 조건에 따라 테스트하고 변경하려면 시간과 노력이 필요합니다.

LVM이 아닌 디스크 환경에 더 많은 스왑 공간 추가

Linux가 설치된 호스트와 스왑 공간에 대한 요구 사항이 변화함에 따라 시스템 정의 스왑 공간의 크기를 수정해야 하는 경우가 있습니다. 이 절차는 스왑 공간 크기를 늘려야 하는 모든 상황에서 사용할 수 있습니다. 충분한 여유 디스크 공간이 있다고 가정합니다. 또한 이 절차에서는 디스크 파티션이 LVM(논리 볼륨 관리)을 사용하는 대신 "원시" EXT4 및 스왑 파티션이라고 가정합니다.

기본 단계는 간단합니다.

기존 스왑 공간을 닫습니다.
  1. 원하는 크기의 새 스왑 파티션을 만듭니다.
  2. 파티션 테이블을 다시 읽으세요.
  3. 파티션을 스왑 공간으로 구성하세요.
  4. /etc/fstab에 새 파티션을 추가하세요.
  5. 오픈 스왑 공간.

컴퓨터를 다시 시작할 필요가 없습니다. /etc/fstab

  • 打开交换空间。
  • 应该不需要重新启动机器。

    为了安全起见,在关闭交换空间前,至少你应该确保没有应用程序在运行,也没有交换空间在使用。freetop 命令可以告诉你交换空间是否在使用中。为了更安全,您可以恢复到运行级别 1 或单用户模式。

    使用关闭所有交换空间的命令关闭交换分区:

    swapoff -a

    现在查看硬盘上的现有分区。

    fdisk -l

    这将显示每个驱动器上的分区表。按编号标识当前的交换分区。

    使用以下命令在交互模式下启动 fdisk

    안전상의 이유로 스왑 공간을 닫기 전에 최소한 실행 중인 애플리케이션이 없고 사용 중인 스왑 공간이 없는지 확인해야 합니다. free 또는 top 명령은 스왑 공간이 사용 중인지 여부를 알려줍니다. 보안을 강화하려면 런레벨 1 또는 단일 사용자 모드로 되돌릴 수 있습니다.

    모든 스왑 공간을 닫는 명령을 사용하여 스왑 파티션을 닫습니다.

    fdisk /dev/<device name>

    이제 하드 드라이브의 기존 파티션을 확인하세요.

    fdisk /dev/sda

    이렇게 하면 각 드라이브의 파티션 테이블이 표시됩니다. 현재 스왑 파티션을 번호로 식별합니다. 🎜

    다음 명령을 사용하여 대화형 모드에서 fdisk를 시작합니다. 🎜🎜

    The partition table has been altered!
    Calling ioctl() to re-read partition table.
    WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
    The kernel still uses the old table.
    The new table will be used at the next reboot.
    Syncing disks.
    🎜🎜예: 🎜🎜
    partprobe
    🎜

    此时,fdisk 是交互方式的,只在指定的磁盘驱动器上进行操作。

    使用 fdiskp 子命令验证磁盘上是否有足够的可用空间来创建新的交换分区。硬盘上的空间以 512 字节的块以及起始和结束柱面编号的形式显示,因此您可能需要做一些计算来确定分配分区之间和末尾的可用空间。

    使用 n 子命令创建新的交换分区。fdisk 会问你开始柱面。默认情况下,它选择编号最低的可用柱面。如果你想改变这一点,输入开始柱面的编号。

    fdisk 命令允许你以多种格式输入分区的大小,包括最后一个柱面号或字节、KB 或 MB 的大小。例如,键入 4000M ,这将在新分区上提供大约 4GB 的空间,然后按回车键。

    使用 p 子命令来验证分区是否按照指定的方式创建的。请注意,除非使用结束柱面编号,否则分区可能与你指定的不完全相同。fdisk 命令只能在整个柱面上增量的分配磁盘空间,因此你的分区可能比你指定的稍小或稍大。如果分区不是您想要的,你可以删除它并重新创建它。

    现在指定新分区是交换分区了 。子命令 t 允许你指定定分区的类型。所以输入 t,指定分区号,当它要求十六进制分区类型时,输入 82,这是 Linux 交换分区类型,然后按回车键。

    当你对创建的分区感到满意时,使用 w 子命令将新的分区表写入磁盘。fdisk 程序将退出,并在完成修改后的分区表的编写后返回命令提示符。当 fdisk 完成写入新分区表时,会收到以下消息:

    The partition table has been altered!
    Calling ioctl() to re-read partition table.
    WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
    The kernel still uses the old table.
    The new table will be used at the next reboot.
    Syncing disks.

    此时,你使用 partprobe 命令强制内核重新读取分区表,这样就不需要执行重新启动机器。

    partprobe

    使用命令 fdisk -l 列出分区,新交换分区应该在列出的分区中。确保新的分区类型是 “Linux swap”。

    修改 /etc/fstab 文件以指向新的交换分区。如下所示:

    LABEL=SWAP-sdaX   swap        swap    defaults        0 0

    其中 X 是分区号。根据新交换分区的位置,添加以下内容:

    /dev/sdaY         swap        swap    defaults        0 0

    请确保使用正确的分区号。现在,可以执行创建交换分区的最后一步。使用 mkswap 命令将分区定义为交换分区。

    mkswap /dev/sdaY

    最后一步是使用以下命令启用交换空间:

    swapon -a

    你的新交换分区现在与以前存在的交换分区一起在线。您可以使用 freetop 命令来验证这一点。

    在 LVM 磁盘环境中添加交换空间

    如果你的磁盘使用 LVM ,更改交换空间将相当容易。同样,假设当前交换卷所在的卷组中有可用空间。默认情况下,LVM 环境中的 Fedora Linux 在安装过程将交换分区创建为逻辑卷。您可以非常简单地增加交换卷的大小。

    以下是在 LVM 环境中增加交换空间大小的步骤:

    1. 关闭所有交换空间。
    2. 增加指定用于交换空间的逻辑卷的大小。
    3. 为交换空间调整大小的卷配置。
    4. 启用交换空间。

    首先,让我们使用 lvs 命令(列出逻辑卷)来验证交换空间是否存在以及交换空间是否是逻辑卷。

    [root@studentvm1 ~]# lvs
      LV     VG                Attr       LSize  Pool   Origin Data%  Meta%  Move Log Cpy%Sync Convert
      home   fedora_studentvm1 -wi-ao----  2.00g                                                      
      pool00 fedora_studentvm1 twi-aotz--  2.00g               8.17   2.93                            
      root   fedora_studentvm1 Vwi-aotz--  2.00g pool00        8.17                                   
      swap   fedora_studentvm1 -wi-ao----  8.00g                                                      
      tmp    fedora_studentvm1 -wi-ao----  5.00g                                                      
      usr    fedora_studentvm1 -wi-ao---- 15.00g                                                      
      var    fedora_studentvm1 -wi-ao---- 10.00g                                                      
    [root@studentvm1 ~]#

    你可以看到当前的交换空间大小为 8GB。在这种情况下,我们希望将 2GB 添加到此交换卷中。首先,停止现有的交换空间。如果交换空间正在使用,终止正在运行的程序。

    swapoff -a

    现在增加逻辑卷的大小。

    [root@studentvm1 ~]# lvextend -L +2G /dev/mapper/fedora_studentvm1-swap
      Size of logical volume fedora_studentvm1/swap changed from 8.00 GiB (2048 extents) to 10.00 GiB (2560 extents).
      Logical volume fedora_studentvm1/swap successfully resized.
    [root@studentvm1 ~]#

    运行 mkswap 命令将整个 10GB 分区变成交换空间。

    [root@studentvm1 ~]# mkswap /dev/mapper/fedora_studentvm1-swap
    mkswap: /dev/mapper/fedora_studentvm1-swap: warning: wiping old swap signature.
    Setting up swapspace version 1, size = 10 GiB (10737414144 bytes)
    no label, UUID=3cc2bee0-e746-4b66-aa2d-1ea15ef1574a
    [root@studentvm1 ~]#

    重新启用交换空间。

    [root@studentvm1 ~]# swapon -a
    [root@studentvm1 ~]#

    现在,使用 lsblk 命令验证新交换空间是否存在。同样,不需要重新启动机器。

    [root@studentvm1 ~]# lsblk
    NAME                                 MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda                                    8:0    0   60G  0 disk
    |-sda1                                 8:1    0    1G  0 part /boot
    `-sda2                                 8:2    0   59G  0 part
      |-fedora_studentvm1-pool00_tmeta   253:0    0    4M  0 lvm  
      | `-fedora_studentvm1-pool00-tpool 253:2    0    2G  0 lvm  
      |   |-fedora_studentvm1-root       253:3    0    2G  0 lvm  /
      |   `-fedora_studentvm1-pool00     253:6    0    2G  0 lvm  
      |-fedora_studentvm1-pool00_tdata   253:1    0    2G  0 lvm  
      | `-fedora_studentvm1-pool00-tpool 253:2    0    2G  0 lvm  
      |   |-fedora_studentvm1-root       253:3    0    2G  0 lvm  /
      |   `-fedora_studentvm1-pool00     253:6    0    2G  0 lvm  
      |-fedora_studentvm1-swap           253:4    0   10G  0 lvm  [SWAP]
      |-fedora_studentvm1-usr            253:5    0   15G  0 lvm  /usr
      |-fedora_studentvm1-home           253:7    0    2G  0 lvm  /home
      |-fedora_studentvm1-var            253:8    0   10G  0 lvm  /var
      `-fedora_studentvm1-tmp            253:9    0    5G  0 lvm  /tmp
    sr0                                   11:0    1 1024M  0 rom  
    [root@studentvm1 ~]#

    您也可以使用 swapon -s 命令或 topfree 或其他几个命令来验证这一点。

    [root@studentvm1 ~]# free
                  total        used        free      shared  buff/cache   available
    Mem:        4038808      382404     2754072        4152      902332     3404184
    Swap:      10485756           0    10485756
    [root@studentvm1 ~]#

    请注意,不同的命令以不同的形式显示或要求输入设备文件。在 /dev 目录中访问特定设备有多种方式。

    推荐学习:《linux视频教程

    위 내용은 리눅스 스왑 공간의 용도는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.