首頁 > 運維 > linux運維 > 主體

linux交換空間有什麼用

藏色散人
發布: 2023-03-25 10:35:25
原創
2030 人瀏覽過

linux交換空間的功能是增加主機可用的虛擬記憶體;交換空間是現代Linux系統中的第二種記憶體類型,交換空間的主要功能就是當全部的RAM被佔用並且需要更多記憶體時,用磁碟空間代替RAM記憶體。

linux交換空間有什麼用

本教學操作環境:linux5.9.8系統、Dell G3電腦。

linux交換空間有什麼用?

Linux 系統上交換空間的介紹

學習如何修改你的系統上的交換空間的容量,以及你到底需要多大的交換空間。

當今無論什麼作業系統 交換(Swap)空間是非常常見的。 Linux 使用交換空間來增加主機可用的虛擬記憶體。它可以在常規文件或邏輯磁碟區上使用一個或多個專用交換分割區或交換文件。

典型電腦中有兩種基本類型的記憶體。第一種類型,隨機存取記憶體 (RAM),用於儲存電腦使用的資料和程式。只有程式和資料儲存在 RAM 中,電腦才能使用它們。隨機記憶體是揮發性記憶體;也就是說,如果電腦關閉了,儲存在 RAM 中的資料就會遺失。

硬碟是用於長期儲存資料和程式的磁性媒體。此磁介質可以很好的保存資料;即使電腦斷電,儲存在磁碟上的資料也會保留下來。 CPU(中央處理器)無法直接存取硬碟上的程式和資料;它們必須先複製到 RAM 中,RAM 是 CPU 存取程式碼指令和操作資料的地方。在引導過程中,電腦將特定的作業系統程式(如核心、init 或 systemd)以及硬碟上的資料複製到 RAM 中,在 RAM 中,電腦的處理器 CPU 可以直接存取這些資料。

交換空間

交換空間是現代 Linux 系統中的第二個記憶體類型。交換空間的主要功能是當全部的 RAM 被佔用並且需要更多記憶體時,用磁碟空間代替 RAM 記憶體。

例如,假設你有一個 8GB RAM 的電腦。如果你啟動的程式沒有填滿 RAM,一切都好,不需要交換。假設你在處理電子表格,當添加更多的行時,你電子表格會增長,加上所有正在運行的程序,將會佔用全部的 RAM 。如果這時沒有可用的交換空間,你將不得不停止處理電子表格,直到關閉一些其他程式來釋放一些 RAM 。

核心使用記憶體管理程式來偵測最近沒有使用的記憶體區塊(記憶體頁)。記憶體管理程式將這些相對不常使用的記憶體頁交換到硬碟上專門指定用於「分頁」或交換的特殊分割區。這會釋放 RAM,為輸入電子表格更多資料騰出了空間。那些換出到硬碟的記憶體頁面被核心的記憶體管理程式碼跟踪,如果需要,可以被分頁回 RAM。

Linux 電腦中的記憶體總量是RAM 交換分割區,交換分割區稱為虛擬記憶體.

Linux 交換分割區類型

Linux 提供了兩種類型的交換空間。預設情況下,大多數 Linux 在安裝時都會建立一個交換分割區,但是也可以使用一個特殊配置的檔案作為交換檔案。交換分割區顧名思義就是一個標準磁碟分割區,由 mkswap 指令指定交換空間。

如果沒有可用磁碟空間來建立​​新的交換分割區,或者卷組中沒有空間為交換空間建立邏輯卷,則可以使用交換文件。這只是一個創建好並預先分配指定大小的常規檔案。然後運行 mkswap 命令將其配置為交換空間。除非絕對必要,否則我不建議使用文件來做交換空間。 (LCTT 譯註:Ubuntu 最近的版本採用了交換文件而非交換空間,所以我對於這種說法保留看法)

頻繁交換

當總虛擬內存(RAM 和交換空間)變得快滿時,可能會發生頻繁交換。系統花了太多時間在交換空間和 RAM 之間做記憶體區塊的頁面切換,以至於幾乎沒有時間實際工作。這種情況的典型症狀是:系統變得緩慢或完全無反應,硬碟指示燈幾乎持續亮起。

使用 free 的指令來顯示 CPU 負載和記憶體使用情況,你會發現 CPU 負載非常高,可能達到系統中 CPU 核心數量的 30 到 40 倍。另一個情況是 RAM 和交換空間幾乎完全被分配了。

事實上,檢視 SAR(系統活動報表)資料也可以顯示這些內容。在我的每個系統上都安裝 SAR ,並將這些用於資料分析。

交換空間的正確大小是多少?

許多年前,硬碟上分配給交換空間大小是電腦上的 RAM 的兩倍(當然,這是大多數電腦的 RAM 以 KB 或 MB 為單位的時候)。因此,如果一台電腦有 64KB 的 RAM,則應該分配 128KB 的交換分區。這個規則考慮到了這樣的事實情況,即 RAM 大小在當時非常小,分配超過 2 倍的 RAM 用於交換空間並不能提高效能。使用超過兩倍的 RAM 進行交換,比實際執行有用的工作的時候,大多數系統將花費更多的時間。

RAM 現在已經很便宜了,如今大多數電腦的 RAM 都達到了幾十億位元組。我的大多數新電腦至少有 8GB 內存,一台有 32GB 內存,我的主工作站有 64GB 內存。我的舊電腦有 4 到 8GB 的​​記憶體。

當操作具有大量 RAM 的電腦時,交換空間的限制效能係數遠低於 2 倍。 Fedora 28 線上安裝指南 定義了目前關於交換空間分配的方法。下面內容是我提出的建議。

下表根據系統中的 RAM 大小以及是否有足夠的記憶體讓系統休眠,提供了交換分區的建議大小。建議的交換分割區大小是在安裝過程中自動建立的。但是,為了滿足系統休眠,您需要在自訂分割區階段編輯交換空間。

表1: Fedora 28 文件中建議的系統交換空間

#系統記憶體大小建議的交換空間所建議的交換空間大小(支援休眠模式) 小於2 GB2 倍RAM3 倍RAM2 GB - 8 GB等於RAM 大小2 倍RAM8 GB - 64 GB0.5 倍RAM1.5 倍RAM大於64 GB工作量相關不建議休眠模式

在上面列出的每個範圍之間的邊界(例如,具有2GB、8GB 或64GB 的系統RAM),請根據所選交換空間和支援休眠功能請謹慎使用。如果你的系統資源允許,增加交換空間可能會帶來更好的效能。

當然,大多數 Linux 管理員對多大的交換空間量有自己的想法。以下的表2 包含了基於我在多種環境中的個人經驗所做出的建議。這些可能不適合你,但是和表 1 一樣,它們可能對你有幫助。

表2: 作者推薦的系統交換空間

RAM 大小建議的交換空間≤ 2GB2X RAM2GB – 8GB= RAM>8GB8GB

這兩個表中共同點,隨著RAM 數量的增加,超過某一點增加更多交換空間只會導致在交換空間幾乎被全部使用之前就發生頻繁交換。根據以上建議,則應盡可能添加更多 RAM,而不是增加更多交換空間。如類似影響系統效能的情況一樣,請使用最適合你的建議。根據 Linux 環境中的條件進行測試和更改是需要時間和精力的。

在非LVM 磁碟環境中新增更多交換空間

面對已安裝Linux 的主機並對交換空間的需求不斷變化,有時有必要修改系統定義的交換空間的大小。此過程可用於任何需要增加交換空間大小的情況。它假設有足夠的可用磁碟空間。此程序也假設磁碟分割為 “原始的” EXT4 和交換分割區,而不是使用邏輯磁碟區管理(LVM)。

基本步驟很簡單:

  1. 關閉現有的交換空間。
  2. 建立所需大小的新交換分割區。
  3. 重讀分割區表。
  4. 將分割區配置為交換空間。
  5. 新增分割區到 /etc/fstab
  6. 開啟交換空間。

應該不需要重新啟動機器。

為了安全起見,在關閉交換空間之前,至少你應該確保沒有應用程式在運行,也沒有交換空間在使用。 freetop 指令可以告訴你交換空間是否在使用中。為了更安全,您可以恢復到運行等級 1 或單一使用者模式。

使用關閉所有交換空間的命令關閉交換分割區:

swapoff -a
登入後複製
登入後複製

#現在查看硬碟上的現有分割區。

fdisk -l
登入後複製

這將顯示每個磁碟機上的分割區表。按編號標識目前的交換分區。

使用下列指令在互動模式下啟動 fdisk

fdisk /dev/<device name>
登入後複製

例如:

fdisk /dev/sda
登入後複製

此时,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视频教程

以上是linux交換空間有什麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板