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