亞寵展、全球寵物產業風向標——亞洲寵物展覽會深度解析
1496
2025-04-01
當今無論什么操作系統交換Swap空間是非常常見的。linux 使用交換空間來增加主機可用的虛擬內存。它可以在常規文件或邏輯卷上使用一個或多個專用交換分區或交換文件。
典型計算機中有兩種基本類型的內存。第一種類型,隨機存取存儲器 (RAM),用于存儲計算機使用的數據和程序。只有程序和數據存儲在 RAM 中,計算機才能使用它們。隨機存儲器是易失性存儲器;也就是說,如果計算機關閉了,存儲在 RAM 中的數據就會丟失。
硬盤是用于長期存儲數據和程序的磁性介質。該磁介質可以很好的保存數據;即使計算機斷電,存儲在磁盤上的數據也會保留下來。CPU(中央處理器)不能直接訪問硬盤上的程序和數據;它們必須首先復制到 RAM 中,RAM 是 CPU 訪問代碼指令和操作數據的地方。在引導過程中,計算機將特定的操作系統程序(如內核、init 或 systemd)以及硬盤上的數據復制到 RAM 中,在 RAM 中,計算機的處理器 CPU 可以直接訪問這些數據。
1.交換空間
交換空間是現代 linux 系統中的第二種內存類型。交換空間的主要功能是當全部的 RAM 被占用并且需要更多內存時,用磁盤空間代替 RAM 內存。
例如,假設你有一個 8GB RAM 的計算機。如果你啟動的程序沒有填滿 RAM,一切都好,不需要交換。假設你在處理電子表格,當添加更多的行時,你電子表格會增長,加上所有正在運行的程序,將會占用全部的 RAM 。如果這時沒有可用的交換空間,你將不得不停止處理電子表格,直到關閉一些其他程序來釋放一些 RAM 。
內核使用一個內存管理程序來檢測最近沒有使用的內存塊(內存頁)。內存管理程序將這些相對不經常使用的內存頁交換到硬盤上專門指定用于“分頁”或交換的特殊分區。這會釋放 RAM,為輸入電子表格更多數據騰出了空間。那些換出到硬盤的內存頁面被內核的內存管理代碼跟蹤,如果需要,可以被分頁回 RAM。
Linux 計算機中的內存總量是 RAM + 交換分區,交換分區被稱為虛擬內存.
2. Linux 交換分區類型
Linux 提供了兩種類型的交換空間。默認情況下,大多數 Linux 在安裝時都會創建一個交換分區,但是也可以使用一個特殊配置的文件作為交換文件。交換分區顧名思義就是一個標準磁盤分區,由?mkswap?命令指定交換空間。
如果沒有可用磁盤空間來創建新的交換分區,或者卷組中沒有空間為交換空間創建邏輯卷,則可以使用交換文件。這只是一個創建好并預分配指定大小的常規文件。然后運行?mkswap?命令將其配置為交換空間。除非絕對必要,否則我不建議使用文件來做交換空間。(LCTT 譯注:Ubuntu 近來的版本采用了交換文件而非交換空間,所以我對于這種說法保留看法)
3. 頻繁交換
當總虛擬內存(RAM 和交換空間)變得快滿時,可能會發生頻繁交換。系統花了太多時間在交換空間和 RAM 之間做內存塊的頁面切換,以至于幾乎沒有時間用于實際工作。這種情況的典型癥狀是:系統變得緩慢或完全無反應,硬盤指示燈幾乎持續亮起。
使用?free?的命令來顯示 CPU 負載和內存使用情況,你會發現 CPU 負載非常高,可能達到系統中 CPU 內核數量的 30 到 40 倍。另一個情況是 RAM 和交換空間幾乎完全被分配了。
事實上,查看 SAR(系統活動報告)數據也可以顯示這些內容。在我的每個系統上都安裝 SAR ,并將這些用于數據分析。
4. 交換空間的正確大小是多少?
許多年前,硬盤上分配給交換空間大小是計算機上的 RAM 的兩倍(當然,這是大多數計算機的 RAM 以 KB 或 MB 為單位的時候)。因此,如果一臺計算機有 64KB 的 RAM,應該分配 128KB 的交換分區。該規則考慮到了這樣的事實情況,即 RAM 大小在當時非常小,分配超過 2 倍的 RAM 用于交換空間并不能提高性能。使用超過兩倍的 RAM 進行交換,比實際執行有用的工作的時候,大多數系統將花費更多的時間。
RAM 現在已經很便宜了,如今大多數計算機的 RAM 都達到了幾十億字節。我的大多數新電腦至少有 8GB 內存,一臺有 32GB 內存,我的主工作站有 64GB 內存。我的舊電腦有 4 到 8GB 的內存。
當操作具有大量 RAM 的計算機時,交換空間的限制性能系數遠低于 2 倍。Fedora 28 在線安裝指南[1]?定義了當前關于交換空間分配的方法。下面內容是我提出的建議。
下表根據系統中的 RAM 大小以及是否有足夠的內存讓系統休眠,提供了交換分區的推薦大小。建議的交換分區大小是在安裝過程中自動建立的。但是,為了滿足系統休眠,您需要在自定義分區階段編輯交換空間。
表 1: Fedora 28 文檔中推薦的系統交換空間
在上面列出的每個范圍之間的邊界(例如,具有 2GB、8GB 或 64GB 的系統 RAM),請根據所選交換空間和支持休眠功能請謹慎使用。如果你的系統資源允許,增加交換空間可能會帶來更好的性能。
當然,大多數 Linux 管理員對多大的交換空間量有自己的想法。下面的表2 包含了基于我在多種環境中的個人經歷所做出的建議。這些可能不適合你,但是和表 1 一樣,它們可能對你有所幫助。
這兩個表的共同點,隨著 RAM 數量的增加,超過某一點增加更多交換空間只會導致在交換空間幾乎被全部使用之前就發生頻繁交換。根據以上建議,則應盡可能添加更多 RAM,而不是增加更多交換空間。如類似影響系統性能的情況一樣,請使用最適合你的建議。根據 Linux 環境中的條件進行測試和更改是需要時間和精力的。
5. 向非 LVM 磁盤環境添加更多交換空間
面對已安裝 Linux 的主機并對交換空間的需求不斷變化,有時有必要修改系統定義的交換空間的大小。此過程可用于需要增加交換空間大小的任何情況。它假設有足夠的可用磁盤空間。此過程還假設磁盤分區為 “原始的” EXT4 和交換分區,而不是使用邏輯卷管理(LVM)。
基本步驟很簡單:
應該不需要重新啟動機器。
為了安全起見,在關閉交換空間前,至少你應該確保沒有應用程序在運行,也沒有交換空間在使用。free?或?top?命令可以告訴你交換空間是否在使用中。為了更安全,您可以恢復到運行級別 1 或單用戶模式。使用關閉所有交換空間的命令關閉交換分區:
swapoff?-a
現在查看硬盤上的現有分區。
fdisk?-l
這將顯示每個驅動器上的分區表。按編號標識當前的交換分區。
使用以下命令在交互模式下啟動?fdisk:
fdisk?/dev/
例如:
fdisk?/dev/sda
此時,fdisk?是交互方式的,只在指定的磁盤驅動器上進行操作。
使用?fdisk?的?p?子命令驗證磁盤上是否有足夠的可用空間來創建新的交換分區。硬盤上的空間以 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
你的新交換分區現在與以前存在的交換分區一起在線。您可以使用?free?或top?命令來驗證這一點。
譯文鏈接:Linux中國
譯者:heguangzhi
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。