簡單明了!理解 Linux 虛擬內(nèi)存的所有信息
虛擬內(nèi)存可幫助操作系統(tǒng)在不中斷的情況下執(zhí)行其進程。虛擬內(nèi)存是現(xiàn)代操作系統(tǒng)的基礎(chǔ)之一,但通常情況下,除非遇到問題,否則您也可能不會真正考慮它。Linux 發(fā)行版要求您在安裝期間設(shè)置虛擬內(nèi)存空間(交換分區(qū)),但大多數(shù)初學(xué)者并不知道這有多大用處。
以下是您需要了解的有關(guān) Linux 上的虛擬內(nèi)存的所有信息。
什么是虛擬內(nèi)存?
虛擬內(nèi)存是從機器物理內(nèi)存中提取出來的一種表示內(nèi)存的方式。它利用了你的 RAM 和你的存儲空間,無論是在傳統(tǒng)的硬盤驅(qū)動器還是 SSD 上。
在Linux 中,這是在內(nèi)核和硬件級別完成的。CPU 有一個稱為內(nèi)存管理單元 (MMU) 的硬件,它將物理內(nèi)存地址轉(zhuǎn)換為虛擬內(nèi)存地址。這些地址與它們在機器上的物理位置無關(guān)。這些地址空間被稱為“頁面”,它們可能位于 RAM 中,也可能位于您的硬盤驅(qū)動器或 SSD 中。操作系統(tǒng)將這些地址視為一個大內(nèi)存池,稱為“地址空間”。
虛擬內(nèi)存利用了這樣一個事實,即理論上并非所有正在使用的內(nèi)存都一直在使用。內(nèi)存中的程序被分解成頁面,內(nèi)核認為不必要的部分被“換出”或移動到硬盤驅(qū)動器。當需要它們時,可以將它們“換入”或帶回 RAM。
驅(qū)動器上用于虛擬內(nèi)存的空間稱為“后備存儲”或“交換空間”。在 Windows 世界中,它通常被實現(xiàn)為一個文件,稱為“交換文件”。在 Linux 中也可以這樣做,但使用專用磁盤分區(qū)更為常見。
Linux 上的交換文件通常保留給最小系統(tǒng)或嵌入式系統(tǒng),后者通常在完全沒有虛擬內(nèi)存的情況下運行,因為嵌入式操作系統(tǒng)必須很小。
虛擬內(nèi)存的結(jié)果是,可以通過使用比機器中的物理 RAM 更多的內(nèi)存來運行大型程序,類似于信用卡可以讓您以比銀行賬戶中更多的錢進行大宗購買。就像信用卡一樣,虛擬內(nèi)存在您需要時很有用,但您不想過度使用它。虛擬內(nèi)存還允許開發(fā)人員創(chuàng)建應(yīng)用程序,而不必知道計算機的內(nèi)存是如何組織的。
歷史上虛擬內(nèi)存的主要缺點是硬盤驅(qū)動器比 RAM 慢。如果一臺機器沒有足夠的 RAM,系統(tǒng)可以無休止地交換頁面,這個過程被稱為“抖動”。在具有更多 RAM 和更快 SSD 取代機械硬盤驅(qū)動器的現(xiàn)代 PC 上,這不是問題,但仍然需要注意。
Linux 交換分區(qū)
來自:Linux 中的交換空間及其用途?https://www.linuxmi.com/linux-swap.html如前所述,在 Linux 上設(shè)置虛擬內(nèi)存的常用方法是使用專用磁盤分區(qū)。安裝實用程序?qū)z查您的硬件并提出一個包含交換分區(qū)的分區(qū)方案。您還可以在安裝后添加交換分區(qū)。如果要向現(xiàn)有驅(qū)動器添加新分區(qū),則必須使用 GParted 等非破壞性分區(qū)工具。確保您已選擇“Linux swap”作為分區(qū)的文件系統(tǒng)。在重新分區(qū)驅(qū)動器之前備份重要數(shù)據(jù)。創(chuàng)建分區(qū)后,使用 mkswap 命令格式化分區(qū)。
sudo mkswap /dev/sdX
現(xiàn)在您必須以 root 身份編輯您的/etc/fstab以添加您的交換分區(qū)。添加到文件中的這一行將設(shè)置一個在引導(dǎo)時掛載的交換分區(qū):
/dev/sdX none swap defaults 0 0
現(xiàn)在使用swapon命令激活新的交換空間,其中 sdX 是交換分區(qū)的名稱:
sudo swapon /dev/sdX
在 Linux 上使用交換文件
使用命令行在Linux 中設(shè)置交換文件很容易。如果您不想費心重新分區(qū)驅(qū)動器,可能想要編輯/etc/fstab 。一種方法是使用fallocate:例如,要創(chuàng)建一個 2GB 的交換文件:
sudo fallocate -l 2G /path/to/swapfile
作為替代方案,您可以使用 dd 命令創(chuàng)建交換文件。
sudo dd if=/dev/zero of=/path/to/swapfile bs=1024 count=2048
確保正確使用 dd 命令,因為輸入文件和輸出文件錯誤會導(dǎo)致數(shù)據(jù)丟失。出于這個原因, fallocate 是首選方法。/dev/zero 設(shè)備是輸出“0”的特殊設(shè)備。此 dd 命令所做的是使用適合用作交換空間的 1024 KB 塊創(chuàng)建一個空白的 2 GB 塊文件。然后,您可以像使用交換分區(qū)一樣對交換文件使用mkswap和swapon命令:
sudo mkswap /path/to/swapfile
sudo swapon /path/to/swapfile
您可能想知道何時應(yīng)該為您的交換空間使用交換文件或?qū)S梅謪^(qū)。選擇很簡單:在大多數(shù)情況下,您應(yīng)該使用分區(qū)。這是 Linux 桌面或服務(wù)器的最佳選擇。安裝程序建議的分區(qū)方案通常適用于單用戶 Linux 桌面。如果您在虛擬機、小型嵌入式系統(tǒng)上運行 Linux,或者您只是不想對現(xiàn)有 Linux 系統(tǒng)進行重新分區(qū),則可能需要使用交換文件。
多少交換空間?
多年來,需要多少交換空間的標準建議是物理 RAM 的兩倍。即使是最便宜的 PC 也配備大容量驅(qū)動器和大量內(nèi)存,這條規(guī)則可能會受到質(zhì)疑。在許多系統(tǒng)上,如果您檢查 top 或 htop,您甚至可能會注意到如果您以這種方式設(shè)置系統(tǒng),您的交換空間甚至根本沒有被使用。
盡管如此,如果您對內(nèi)存提出更高的要求,兩倍的物理內(nèi)存是一個很好的起點和保險政策。您可以根據(jù)需要對系統(tǒng)進行更改。如果您的系統(tǒng)正在使用所有 RAM,則計算機在使用虛擬內(nèi)存時可能會遇到性能問題。如今,這已經(jīng)不是什么大問題了,因為即使是最便宜的 PC 上的 RAM 量也綽綽有余,而且 SSD 的速度也比舊硬盤快得多。這仍然是您應(yīng)該注意的事情。解決此問題的最簡單方法是向您的計算機添加更多 RAM。如果這不可行,您可以嘗試調(diào)整 Linux 內(nèi)核的“swappiness”。swappiness 數(shù)字決定了內(nèi)核在虛擬內(nèi)存中的投入量。它的范圍從 0 到 100。將其設(shè)置為 0 意味著 Linux 根本不會交換,而在 100 時,它會隨時交換。大多數(shù)系統(tǒng)的默認值為 60。要臨時更改 swappiness,請使用 sysctl 命令:
sudo sysctl vm.swappiness=20
該命令中的“20”將是交換編號,直到您重新啟動。要永久更改它,請以 root 身份編輯/etc/sysctl.conf文件并放置“vm.swappiness=[swappiness number]”行,其中“[swappiness number]”是您想要的 swappiness 編號。在您可以安裝更多 RAM 之前,這將是一個權(quán)宜之計。
虛擬內(nèi)存讓您的 Linux 系統(tǒng)平穩(wěn)運行
虛擬內(nèi)存是現(xiàn)代操作系統(tǒng)(包括 Linux)的一個組件,可讓您的計算機平穩(wěn)運行。您可以使用交換文件,但通常的方法是專用分區(qū)。您不必考慮太多,但 Linux 交換分區(qū)和交換文件很容易設(shè)置和排除故障。很多這樣的建議也適用于其他系統(tǒng),包括 Windows,即使設(shè)置虛擬內(nèi)存的方法不同。