RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux系統(tǒng)上內(nèi)存類型交換空間詳解

Linux愛好者 ? 來源:工程師曾玲 ? 2019-02-02 17:31 ? 次閱讀

當(dāng)今無論什么操作系統(tǒng)交換Swap空間是非常常見的。Linux 使用交換空間來增加主機(jī)可用的虛擬內(nèi)存。它可以在常規(guī)文件或邏輯卷上使用一個或多個專用交換分區(qū)或交換文件。

典型計算機(jī)中有兩種基本類型的內(nèi)存。第一種類型,隨機(jī)存取存儲器 (RAM),用于存儲計算機(jī)使用的數(shù)據(jù)和程序。只有程序和數(shù)據(jù)存儲在 RAM 中,計算機(jī)才能使用它們。隨機(jī)存儲器是易失性存儲器;也就是說,如果計算機(jī)關(guān)閉了,存儲在 RAM 中的數(shù)據(jù)就會丟失。

硬盤是用于長期存儲數(shù)據(jù)和程序的磁性介質(zhì)。該磁介質(zhì)可以很好的保存數(shù)據(jù);即使計算機(jī)斷電,存儲在磁盤上的數(shù)據(jù)也會保留下來。CPU(中央處理器)不能直接訪問硬盤上的程序和數(shù)據(jù);它們必須首先復(fù)制到 RAM 中,RAM 是 CPU 訪問代碼指令和操作數(shù)據(jù)的地方。在引導(dǎo)過程中,計算機(jī)將特定的操作系統(tǒng)程序(如內(nèi)核、init 或 systemd)以及硬盤上的數(shù)據(jù)復(fù)制到 RAM 中,在 RAM 中,計算機(jī)的處理器 CPU 可以直接訪問這些數(shù)據(jù)。

交換空間

交換空間是現(xiàn)代 Linux 系統(tǒng)中的第二種內(nèi)存類型。交換空間的主要功能是當(dāng)全部的 RAM 被占用并且需要更多內(nèi)存時,用磁盤空間代替 RAM 內(nèi)存。

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

內(nèi)核使用一個內(nèi)存管理程序來檢測最近沒有使用的內(nèi)存塊(內(nèi)存頁)。內(nèi)存管理程序?qū)⑦@些相對不經(jīng)常使用的內(nèi)存頁交換到硬盤上專門指定用于“分頁”或交換的特殊分區(qū)。這會釋放 RAM,為輸入電子表格更多數(shù)據(jù)騰出了空間。那些換出到硬盤的內(nèi)存頁面被內(nèi)核的內(nèi)存管理代碼跟蹤,如果需要,可以被分頁回 RAM。

Linux 計算機(jī)中的內(nèi)存總量是 RAM + 交換分區(qū),交換分區(qū)被稱為虛擬內(nèi)存。

Linux 交換分區(qū)類型

Linux 提供了兩種類型的交換空間。默認(rèn)情況下,大多數(shù) Linux 在安裝時都會創(chuàng)建一個交換分區(qū),但是也可以使用一個特殊配置的文件作為交換文件。交換分區(qū)顧名思義就是一個標(biāo)準(zhǔn)磁盤分區(qū),由 mkswap 命令指定交換空間。

如果沒有可用磁盤空間來創(chuàng)建新的交換分區(qū),或者卷組中沒有空間為交換空間創(chuàng)建邏輯卷,則可以使用交換文件。這只是一個創(chuàng)建好并預(yù)分配指定大小的常規(guī)文件。然后運行 mkswap命令將其配置為交換空間。除非絕對必要,否則我不建議使用文件來做交換空間。(LCTT 譯注:Ubuntu 近來的版本采用了交換文件而非交換空間,所以我對于這種說法保留看法)

頻繁交換

當(dāng)總虛擬內(nèi)存(RAM 和交換空間)變得快滿時,可能會發(fā)生頻繁交換。系統(tǒng)花了太多時間在交換空間和 RAM 之間做內(nèi)存塊的頁面切換,以至于幾乎沒有時間用于實際工作。這種情況的典型癥狀是:系統(tǒng)變得緩慢或完全無反應(yīng),硬盤指示燈幾乎持續(xù)亮起。

使用 free 的命令來顯示 CPU 負(fù)載和內(nèi)存使用情況,你會發(fā)現(xiàn) CPU 負(fù)載非常高,可能達(dá)到系統(tǒng)中 CPU 內(nèi)核數(shù)量的 30 到 40 倍。另一個情況是 RAM 和交換空間幾乎完全被分配了。

事實上,查看 SAR(系統(tǒng)活動報告)數(shù)據(jù)也可以顯示這些內(nèi)容。在我的每個系統(tǒng)上都安裝 SAR ,并將這些用于數(shù)據(jù)分析。

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

許多年前,硬盤上分配給交換空間大小是計算機(jī)上的 RAM 的兩倍(當(dāng)然,這是大多數(shù)計算機(jī)的 RAM 以 KB 或 MB 為單位的時候)。因此,如果一臺計算機(jī)有 64KB 的 RAM,應(yīng)該分配 128KB 的交換分區(qū)。該規(guī)則考慮到了這樣的事實情況,即 RAM 大小在當(dāng)時非常小,分配超過 2 倍的 RAM 用于交換空間并不能提高性能。使用超過兩倍的 RAM 進(jìn)行交換,比實際執(zhí)行有用的工作的時候,大多數(shù)系統(tǒng)將花費更多的時間。

RAM 現(xiàn)在已經(jīng)很便宜了,如今大多數(shù)計算機(jī)的 RAM 都達(dá)到了幾十億字節(jié)。我的大多數(shù)新電腦至少有 8GB 內(nèi)存,一臺有 32GB 內(nèi)存,我的主工作站有 64GB 內(nèi)存。我的舊電腦有 4 到 8GB 的內(nèi)存。

當(dāng)操作具有大量 RAM 的計算機(jī)時,交換空間的限制性能系數(shù)遠(yuǎn)低于 2 倍。Fedora 28 在線安裝指南 定義了當(dāng)前關(guān)于交換空間分配的方法。下面內(nèi)容是我提出的建議。

下表根據(jù)系統(tǒng)中的 RAM 大小以及是否有足夠的內(nèi)存讓系統(tǒng)休眠,提供了交換分區(qū)的推薦大小。建議的交換分區(qū)大小是在安裝過程中自動建立的。但是,為了滿足系統(tǒng)休眠,您需要在自定義分區(qū)階段編輯交換空間。

表 1: Fedora 28 文檔中推薦的系統(tǒng)交換空間

Linux系統(tǒng)上內(nèi)存類型交換空間詳解

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

當(dāng)然,大多數(shù) Linux 管理員對多大的交換空間量有自己的想法。下面的表2 包含了基于我在多種環(huán)境中的個人經(jīng)歷所做出的建議。這些可能不適合你,但是和表 1 一樣,它們可能對你有所幫助。

表 2: 作者推薦的系統(tǒng)交換空間

Linux系統(tǒng)上內(nèi)存類型交換空間詳解

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

向非 LVM 磁盤環(huán)境添加更多交換空間

面對已安裝 Linux 的主機(jī)并對交換空間的需求不斷變化,有時有必要修改系統(tǒng)定義的交換空間的大小。此過程可用于需要增加交換空間大小的任何情況。它假設(shè)有足夠的可用磁盤空間。此過程還假設(shè)磁盤分區(qū)為 “原始的” EXT4 和交換分區(qū),而不是使用邏輯卷管理(LVM)。

基本步驟很簡單:

關(guān)閉現(xiàn)有的交換空間。

創(chuàng)建所需大小的新交換分區(qū)。

重讀分區(qū)表。

將分區(qū)配置為交換空間。

添加新分區(qū)到 /etc/fstab。

打開交換空間。

應(yīng)該不需要重新啟動機(jī)器。

為了安全起見,在關(guān)閉交換空間前,至少你應(yīng)該確保沒有應(yīng)用程序在運行,也沒有交換空間在使用。free 或 top 命令可以告訴你交換空間是否在使用中。為了更安全,您可以恢復(fù)到運行級別 1 或單用戶模式。

使用關(guān)閉所有交換空間的命令關(guān)閉交換分區(qū):

swapoff -a

現(xiàn)在查看硬盤上的現(xiàn)有分區(qū)。

fdisk -l

這將顯示每個驅(qū)動器上的分區(qū)表。按編號標(biāo)識當(dāng)前的交換分區(qū)。

使用以下命令在交互模式下啟動 fdisk:

fdisk /dev/

例如:

fdisk /dev/sda

此時,fdisk 是交互方式的,只在指定的磁盤驅(qū)動器上進(jìn)行操作。

使用 fdisk 的 p 子命令驗證磁盤上是否有足夠的可用空間來創(chuàng)建新的交換分區(qū)。硬盤上的空間以 512 字節(jié)的塊以及起始和結(jié)束柱面編號的形式顯示,因此您可能需要做一些計算來確定分配分區(qū)之間和末尾的可用空間。

使用 n 子命令創(chuàng)建新的交換分區(qū)。fdisk 會問你開始柱面。默認(rèn)情況下,它選擇編號最低的可用柱面。如果你想改變這一點,輸入開始柱面的編號。

fdisk 命令允許你以多種格式輸入分區(qū)的大小,包括最后一個柱面號或字節(jié)、KB 或 MB 的大小。例如,鍵入 4000M ,這將在新分區(qū)上提供大約 4GB 的空間,然后按回車鍵。

使用 p 子命令來驗證分區(qū)是否按照指定的方式創(chuàng)建的。請注意,除非使用結(jié)束柱面編號,否則分區(qū)可能與你指定的不完全相同。fdisk 命令只能在整個柱面上增量的分配磁盤空間,因此你的分區(qū)可能比你指定的稍小或稍大。如果分區(qū)不是您想要的,你可以刪除它并重新創(chuàng)建它。

現(xiàn)在指定新分區(qū)是交換分區(qū)了 。子命令 t 允許你指定定分區(qū)的類型。所以輸入 t,指定分區(qū)號,當(dāng)它要求十六進(jìn)制分區(qū)類型時,輸入 82,這是 Linux 交換分區(qū)類型,然后按回車鍵。

當(dāng)你對創(chuàng)建的分區(qū)感到滿意時,使用 w 子命令將新的分區(qū)表寫入磁盤。fdisk 程序?qū)⑼顺?,并在完成修改后的分區(qū)表的編寫后返回命令提示符。當(dāng) fdisk 完成寫入新分區(qū)表時,會收到以下消息:

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 命令強(qiáng)制內(nèi)核重新讀取分區(qū)表,這樣就不需要執(zhí)行重新啟動機(jī)器。

partprobe

使用命令 fdisk -l 列出分區(qū),新交換分區(qū)應(yīng)該在列出的分區(qū)中。確保新的分區(qū)類型是 “Linux swap”。

修改 /etc/fstab 文件以指向新的交換分區(qū)。如下所示:

LABEL=SWAP-sdaX swap swap defaults 0 0

其中 X 是分區(qū)號。根據(jù)新交換分區(qū)的位置,添加以下內(nèi)容:

/dev/sdaY swap swap defaults 0 0

請確保使用正確的分區(qū)號?,F(xiàn)在,可以執(zhí)行創(chuàng)建交換分區(qū)的最后一步。使用 mkswap 命令將分區(qū)定義為交換分區(qū)。

mkswap /dev/sdaY

最后一步是使用以下命令啟用交換空間:

swapon -a

你的新交換分區(qū)現(xiàn)在與以前存在的交換分區(qū)一起在線。您可以使用 free 或top 命令來驗證這一點。

在 LVM 磁盤環(huán)境中添加交換空間

如果你的磁盤使用 LVM ,更改交換空間將相當(dāng)容易。同樣,假設(shè)當(dāng)前交換卷所在的卷組中有可用空間。默認(rèn)情況下,LVM 環(huán)境中的 Fedora Linux 在安裝過程將交換分區(qū)創(chuàng)建為邏輯卷。您可以非常簡單地增加交換卷的大小。

以下是在 LVM 環(huán)境中增加交換空間大小的步驟:

關(guān)閉所有交換空間。

增加指定用于交換空間的邏輯卷的大小。

為交換空間調(diào)整大小的卷配置。

啟用交換空間。

首先,讓我們使用 lvs 命令(列出邏輯卷)來驗證交換空間是否存在以及交換空間是否是邏輯卷。

Linux系統(tǒng)上內(nèi)存類型交換空間詳解

你可以看到當(dāng)前的交換空間大小為 8GB。在這種情況下,我們希望將 2GB 添加到此交換卷中。首先,停止現(xiàn)有的交換空間。如果交換空間正在使用,終止正在運行的程序。

swapoff -a

現(xiàn)在增加邏輯卷的大小。

[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 分區(qū)變成交換空間。

[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 ~]#

現(xiàn)在,使用 lsblk 命令驗證新交換空間是否存在。同樣,不需要重新啟動機(jī)器。

Linux系統(tǒng)上內(nèi)存類型交換空間詳解

您也可以使用 swapon -s 命令或 top、free 或其他幾個命令來驗證這一點。

Linux系統(tǒng)上內(nèi)存類型交換空間詳解

請注意,不同的命令以不同的形式顯示或要求輸入設(shè)備文件。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 存儲器
    +關(guān)注

    關(guān)注

    38

    文章

    7484

    瀏覽量

    163762
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11292

    瀏覽量

    209323
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3019

    瀏覽量

    74003

原文標(biāo)題:Linux 系統(tǒng)上交換空間的介紹

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Linux內(nèi)存管理是什么,Linux內(nèi)存管理詳解

    Linux內(nèi)存管理 Linux內(nèi)存管理是一個非常復(fù)雜的過程,主要分成兩個大的部分:內(nèi)核的內(nèi)存管理和進(jìn)程虛擬
    的頭像 發(fā)表于 05-11 17:54 ?6039次閱讀
    <b class='flag-5'>Linux</b>的<b class='flag-5'>內(nèi)存</b>管理是什么,<b class='flag-5'>Linux</b>的<b class='flag-5'>內(nèi)存</b>管理<b class='flag-5'>詳解</b>

    關(guān)于Linux內(nèi)存管理的詳細(xì)介紹

    Linux內(nèi)存管理是指對系統(tǒng)內(nèi)存的分配、釋放、映射、管理、交換、壓縮等一系列操作的管理。在Linux
    發(fā)表于 03-06 09:28 ?1064次閱讀

    Linux LED子系統(tǒng)詳解

    Linux LED子系統(tǒng)詳解
    的頭像 發(fā)表于 06-10 10:37 ?1539次閱讀
    <b class='flag-5'>Linux</b> LED子<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>詳解</b>

    查看Linux系統(tǒng)內(nèi)存使用情況的幾種方法

    Linux系統(tǒng)中,內(nèi)存監(jiān)控是優(yōu)化系統(tǒng)性能的關(guān)鍵。本文為你介紹12種方法,幫助你全面掌握Linux系統(tǒng)
    的頭像 發(fā)表于 11-13 09:30 ?1.4w次閱讀
    查看<b class='flag-5'>Linux</b><b class='flag-5'>系統(tǒng)</b><b class='flag-5'>內(nèi)存</b>使用情況的幾種方法

    Linux內(nèi)核內(nèi)存管理架構(gòu)解析

    內(nèi)存管理子系統(tǒng)可能是linux內(nèi)核中最為復(fù)雜的一個子系統(tǒng),其支持的功能需求眾多,如頁面映射、頁面分配、頁面回收、頁面交換、冷熱頁面、緊急頁面
    的頭像 發(fā)表于 01-04 09:24 ?653次閱讀
    <b class='flag-5'>Linux</b>內(nèi)核<b class='flag-5'>內(nèi)存</b>管理架構(gòu)解析

    Linux內(nèi)核地址映射模型與Linux內(nèi)核高端內(nèi)存詳解

    Linux 操作系統(tǒng)和驅(qū)動程序運行在內(nèi)核空間,應(yīng)用程序運行在用戶空間,兩者不能簡單地使用指針傳遞數(shù)據(jù),因為Linux使用的虛擬
    發(fā)表于 05-08 10:33 ?3452次閱讀
    <b class='flag-5'>Linux</b>內(nèi)核地址映射模型與<b class='flag-5'>Linux</b>內(nèi)核高端<b class='flag-5'>內(nèi)存</b><b class='flag-5'>詳解</b>

    Linux內(nèi)存點滴 用戶進(jìn)程內(nèi)存空間

    進(jìn)程都有完全屬于自己的,獨立的,不***擾的內(nèi)存空間。此空間,被分成幾個段(Segment),分別是Text, Data, BSS, Heap, Stack。用戶進(jìn)程內(nèi)存空間,也是系統(tǒng)
    發(fā)表于 08-14 16:23

    淺析linux內(nèi)存釋放和使用限制

    1、內(nèi)存運行機(jī)制1)物理內(nèi)存和虛擬內(nèi)存物理內(nèi)存就是系統(tǒng)硬件提供的內(nèi)存大小,是真正的
    發(fā)表于 07-11 07:50

    Linux內(nèi)存系統(tǒng)---走進(jìn)Linux 內(nèi)存

    Linux內(nèi)存系統(tǒng)---走進(jìn)Linux 內(nèi)存 1、內(nèi)存是什么?1)
    發(fā)表于 08-26 08:05

    高端內(nèi)存詳解linux用戶空間與內(nèi)核空間

    Linux 操作系統(tǒng)和驅(qū)動程序運行在內(nèi)核空間,應(yīng)用程序運行在用戶空間,兩者不能簡單地使用指針傳遞數(shù)據(jù),因為Linux使用的虛擬
    發(fā)表于 04-28 17:33 ?984次閱讀
    高端<b class='flag-5'>內(nèi)存</b>的<b class='flag-5'>詳解</b>:<b class='flag-5'>linux</b>用戶<b class='flag-5'>空間</b>與內(nèi)核<b class='flag-5'>空間</b>

    Linux操作系統(tǒng)知識講解:走進(jìn)linux 內(nèi)存地址空間

    Linux操作系統(tǒng)知識講解:走進(jìn)linux 內(nèi)存地址空間
    的頭像 發(fā)表于 08-28 10:45 ?5038次閱讀
    <b class='flag-5'>Linux</b>操作<b class='flag-5'>系統(tǒng)</b>知識講解:走進(jìn)<b class='flag-5'>linux</b> <b class='flag-5'>內(nèi)存</b>地址<b class='flag-5'>空間</b>

    Linux使用和不使用交換空間的區(qū)別

    我們知道Linux內(nèi)核使用交換空間而不是RAM內(nèi)存的時候會嚴(yán)重降低性能。那么,有人可能會問,既然我有足夠多的可用內(nèi)存,刪除
    的頭像 發(fā)表于 12-05 16:59 ?1725次閱讀

    如何解決內(nèi)存碎片與內(nèi)存交換效率慢的問題

    內(nèi)存分頁 分段的好處是能產(chǎn)生連續(xù)的內(nèi)存空間,但是會出現(xiàn)大量內(nèi)存碎片與內(nèi)存交換效率低的問題 先思考一下怎么解決這兩個問題,
    的頭像 發(fā)表于 10-09 16:57 ?1021次閱讀
    如何解決<b class='flag-5'>內(nèi)存</b>碎片與<b class='flag-5'>內(nèi)存</b><b class='flag-5'>交換</b>效率慢的問題

    Linux 內(nèi)存管理總結(jié)

    一、Linux內(nèi)存管理概述 Linux內(nèi)存管理是指對系統(tǒng)內(nèi)存的分配、釋放、映射、管理、
    的頭像 發(fā)表于 11-10 14:58 ?523次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>內(nèi)存</b>管理總結(jié)

    Linux下如何管理虛擬內(nèi)存 使用虛擬內(nèi)存時的常見問題

    Linux系統(tǒng)中,虛擬內(nèi)存管理是操作系統(tǒng)內(nèi)核的一個重要功能,負(fù)責(zé)管理物理內(nèi)存和磁盤上的交換
    的頭像 發(fā)表于 12-04 09:19 ?352次閱讀
    RM新时代网站-首页