導航:首頁 > 編程系統 > linux虛擬內存管理

linux虛擬內存管理

發布時間:2023-09-07 20:30:28

『壹』 linux設置開啟swap交換分區基本命令(虛擬內存)

linux設置開啟swap交換分區基本命令(虛擬內存)

在Linux系統下,我們要怎麼開啟swap交換分區,基本設置命令是什麼呢?下面為大家帶來最基本的配置命令,希望對大家有所幫助!

1.驗證不存在交換分區free-m

輸出如下:

Mem:99594747046142

-/+buffers/cache:758236

Swap:000

如果swap選項total是0則表示沒有交換分區,開始下一步

2.創建swap分區

使用dd命令選擇swap分區目錄以及大小,在此我們給他放到根目錄,創建的.是2G的虛擬內存,可以根據自己需要選擇大小。ddif=/dev/zeroof=/swapfilecount=2048bs=1M

接下來驗證根目錄是否存在swapfilels/|grepswapfile

不出意外的話你將會看到swapfile

3.激活swap分區

交換分區不會自動激活,你需要告訴伺服器如何格式化文件,使它作為一個有效的交換分區。

出於安全考慮,交交換區許可權設置成600

chmod600/swapfile

使用mkswap命令來設置交換文件:mkswap/swapfile

4.開啟swap分區swapon/swapfile

再次使用free-m查看內存使用情況,輸出如下:

Mem:184017548616231519

-/+buffers/cache:2101630

Swap:204702047

5.設置允許開機啟用swap分區sudovi/etc/fstab

在後面加上/swapfilenoneswapsw00

;

『貳』 Linux 內核的內存管理 - 概念

Concepts overview — The Linux Kernel documentation

Linux中的內存管理是一個復雜的系統,經過多年的發展,它包含越來越多的功能,以支持從 MMU-less microcontrollers 到 supercomputers 的各種系統。
沒有MMU內存管理的系統被稱為 nommu ,它值得寫一份專門的文檔進行描述。
盡管有些概念是相同的,這里我們假設MMU可用,CPU可以將虛擬地址轉換為物理地址。

計算機系統中的物理內存是有限資源,即便支持內存熱插拔,其可以安裝的內存也有限的。物理內存不一定必須是連續的;它可以作為一組不同的地址范圍被訪問。此外,不同的CPU架構,甚至同架構的不同實現對如何定義這些地址范圍都是不同的。

這使得直接處理物理內存異常復雜,為了避免這種復雜性,開發了 虛擬內存 (virtual memory) 的概念。

虛擬內存從應用軟體中抽象出物理內存的細節,只允許在物理內存中保留需要的信息 (demand paging) ,並提供一種機制來保護和控制進程之間的數據共享。

通過虛擬內存,每次內存訪問都訪問一個 虛擬地址 。當CPU對從系統內存讀取(或寫入)的指令進行解碼時,它將該指令中編碼的虛擬地址轉換為內存控制器可以理解的物理地址。

物理內存被切分為 頁幀 page frames 頁 pages 。頁的大小是基於架構的。一些架構允許從幾個支持的值中選擇頁大小;此選擇在內核編譯時設置到內核配置。

每個物理內存頁都可以映射為一個或多個 虛擬頁(virtual pages) 。映射關系描述在 頁表(page tables) 中,頁表將程序使用的虛擬地址轉換為物理內存地址。頁表以層次結構組織。

最底層的表包含軟體使用的實際內存頁的物理地址。較高層的表包含較低層表頁的物理地址。頂層表的指針駐留在寄存器中。
當CPU進行地址轉換的時候,它使用寄存器訪問頂級頁表。

虛擬地址的高位,用於頂級頁表的條目索引。然後,通過該條目訪問下級,下級的虛擬地址位又作為其下下級頁表的索引。虛擬地址的最低位定義實際頁內的偏移量。

地址轉換需要多次內存訪問,而內存訪問相對於CPU速度來說比較慢。為了避免在地址轉換上花費寶貴的處理器周期,CPU維護著一個稱為 TLB (Translation Lookaside Buffer)的用於地址轉換緩存(cache)。通常TLB是非常稀缺的資源,需要大內存工作應用程序會因為TLB未命中而影響性能。

很多現代CPU架構允許頁表的高層直接映射到內存頁。例如,x86架構,可以通過二級、三級頁表的條目映射2M甚至1G內存頁。在Linux中,這些內存頁稱為 大頁 (Huge) 。大頁的使用顯著降低了TLB的壓力,提高了TLB命中率,從而提高了系統的整體性能。

Linux提供兩種機制開啟使用大頁映射物理內存。

第一個是 HugeTLB 文件系統,即 hugetlbfs 。它是一個偽文件系統,使用RAM作為其存儲。在此文件系統中創建的文件,數據駐留在內存中,並使用大頁進行映射。
關於 HugeTLB Pages

另一個被稱為 THP (Transparent HugePages) ,後出的開啟大頁映射物理內存的機制。
hugetlbfs 不同,hugetlbfs要求用戶和/或系統管理員配置系統內存的哪些部分應該並可以被大頁映射;THP透明地管理這些映射並獲取名稱。
關於 Transparent Hugepage Support

通常,硬體對不同物理內存范圍的訪問方式有所限制。某些情況下,設備不能對所有可定址內存執行DMA。在其他情況下,物理內存的大小超過虛擬內存的最大可定址大小,需要採取特殊措施來訪問部分內存。還有些情況,物理內存的尺寸超過了虛擬內存的最大可定址尺寸,需要採取特殊措施來訪問部分內存。

Linux根據內存頁的使用情況,將其組合為多個 zones 。比如, ZONE_DMA 包含設備用於DMA的內存, ZONE_HIGHMEM 包含未永久映射到內核地址空間的內存, ZONE_NORMAL 包含正常定址內存頁。
內存zones的實際層次架構取決於硬體,因為並非所有架構都定義了所有的zones,不同平台對DMA的要求也不同。

多處理器機器很多基於 NUMA (Non-Uniform Memory Access system - 非統一內存訪問系統 )架構。 在這樣的系統中,根據與處理器的「距離」,內存被安排成具有不同訪問延遲的 banks 。每個 bank 被稱為一個 node ,Linux為每個 node 構造一個獨立的內存管理子系統。 Node 有自己的zones集合、free&used頁面列表,以及各種統計計數器。
What is NUMA?
NUMA Memory Policy

物理內存易失,將數據放入內存的常見情況是讀取文件。讀取文件時,數據會放入 頁面緩存(page cache) ,可以在再次讀取時避免耗時的磁碟訪問。同樣,寫文件時,數據也會被放入 頁面緩存 ,並最終進入存儲設備。被寫入的頁被標記為 臟頁(dirty page) ,當Linux決定將其重用時,它會將更新的數據同步到設備上的文件。

匿名內存 anonymous memory 匿名映射 anonymous mappings 表示沒有後置文件系統的內存。這些映射是為程序的stack和heap隱式創建的,或調用mmap(2)顯式創建的。通常,匿名映射只定義允許程序訪問的虛擬內存區域。讀,會創建一個頁表條目,該條目引用一個填充有零的特殊物理頁。寫,則分配一個常規物理頁來保存寫入數據。該頁將被標記為臟頁,如果內核決定重用該頁,則臟頁將被交換出去 swapped out

縱貫整個系統生命周期,物理頁可用於存儲不同類型的數據。它可以是內核內部數據結構、設備驅動DMA緩沖區、讀取自文件系統的數據、用戶空間進程分配的內存等。
根據內存頁使用情況,Linux內存管理會區別處理。可以隨時釋放的頁面稱為 可回收(reclaimable) 頁面,因為它們把數據緩存到了其他地方(比如,硬碟),或者被swap out到硬碟上。
可回收頁最值得注意的是 頁面緩存 匿名頁面

在大多數情況下,存放內部內核數據的頁,和用作DMA緩沖區的頁無法重用,它們將保持現狀直到用戶釋放。這樣的被稱為 不可回收頁(unreclaimable)
然而,在特定情況下,即便是內核數據結構佔用的頁面也會被回收。
例如,文件系統元數據的緩存(in-memory)可以從存儲設備中重新讀取,因此,當系統存在內存壓力時,可以從主內存中丟棄它們。

釋放可回收物理內存頁並重新調整其用途的過程稱為 (surprise!) reclaim
Linux支持非同步或同步回收頁,取決於系統的狀態。
當系統負載不高時,大部分內存是空閑的,可以立即從空閑頁得到分配。
當系統負載提升後,空閑頁減少,當達到某個閾值( low watermark )時,內存分配請求將喚醒 kswapd 守護進程。它將以非同步的方式掃描內存頁。如果內存頁中的數據在其他地方也有,則釋放這些內存頁;或者退出內存到後置存儲設備(關聯 臟頁 )。

隨著內存使用量進一步增加,並達到另一個閾值- min watermark -將觸發回收。這種情況下,分配將暫停,直到回收到足夠的內存頁。

當系統運行時,任務分配並釋放內存,內存變得碎片化。
雖然使用虛擬內存可以將分散的物理頁表示為虛擬連續范圍,但有時需要分配大的連續的物理內存。這種需求可能會提升。例如,當設備驅動需要一個大的DMA緩沖區時,或當THP分配一個大頁時。
內存地址壓縮(compaction ) 解決了碎片問題。
該機制將佔用的頁從內存zone的下部移動到上部的空閑頁。壓縮掃描完成後,zone開始處的空閑頁就並在一起了,分配較大的連續物理內存就可行了。

reclaim 類似, compaction 可以在 kcompactd守護進程中非同步進行,也可以作為內存分配請求的結果同步進行。

在存在負載的機器上,內存可能會耗盡,內核無法回收到足夠的內存以繼續運行。
為了保障系統的其餘部分,引入了 OOM killer

OOM killer 選擇犧牲一個任務來保障系統的總體健康。選定的任務被killed,以期望在它退出後釋放足夠的內存以繼續正常的操作。

『叄』 linux中查看虛擬內存和cpu佔用率的命令是什麼

top,free,cat/proc/meminfo,cat/proc/cpuinfo。

[root@centerlisdbproc]#dmidecode|grep-A16"MemoryDevice"|more[objectObject]。

查看內存使用情況:cat/proc/meminfo,查看CPU使用情況:cat /proc/cpuinfo。

在系統維護的過程中,隨時可能有需要查看 CPU 使用率,並根據相應信息分析系統狀況的需要。在 CentOS 中,可以通過 top 命令來查看 CPU 使用狀況。

運行 top 命令後,CPU 使用狀態會以全屏的方式顯示,並且會神姿處在對話的模式 -- 用基於 top 的命令,可以控制顯示方式等等。退出 top 的命令為 q (在 top 運行中敲 q 鍵一次)。

top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源佔用狀況,類似於Windows的任務管理器。

可以直接使用top命令後,查看%MEM的內容。可以選擇按進程查看或者按用戶查看,如想查看游純絕oracle用戶的進程內存使用情況的話可以使用如下的命令:$ top -u oracle。

(3)linux虛擬內存管理擴展閱讀:

一、查看內存佔用:

1、free

# free -m。

以MB為單位顯示內存使用情況。

# free -h。

以GB為單位顯示內存使用情況。

# free -t。

以總和的形式查詢內存的使用信息。

# free -s 5。

周期性的查詢內存使用信息。

每5秒執行一次命令。

二、查看CPU使用情況:

1、top。

top後鍵入P看一下誰佔用最大。

# top -d 5。

周期性的查詢CPU使用信息。

每5秒刷新一次。

2、ps auxw(查看本機的進程所佔cpu和mem的百分比情況)。

使用"ps auxw" 可以查看到本機的進程所佔cpu和mem的百分比情況。

# ps auxw | head -1

%CPU 進程的cpu佔用率。

%MEM 進程的內存佔用率。

3、查看本機所有進程的CPU佔比之和。

# cat cpu_per.sh

三、查褲皮看cpu信息(信息記錄在/proc/cpuinfo中)

# 總核數 = 物理CPU個數 X 每顆物理CPU的核數。

# 總邏輯CPU數 = 物理CPU個數 X 每顆物理CPU的核數 X 超線程數。



『肆』 linux中物理內存和虛擬內存

vmstat是Virtual Meomory Statistics(虛擬內存統計)的縮寫,可對操作系統的虛擬內存、進程、CPU活動進行監控。他是對系統的整體情況進行統計,不足之處是無法對某個進程進行深入分析。vmstat 工具提供了一種低開銷的系統性能觀察方式。因為 vmstat 本身就是低開銷工具,在非常高負荷的伺服器上,你需要查看並監控系統的健康情況,在控制窗口還是能夠使用vmstat 輸出結果。在學習vmstat命令前,我們先了解一下Linux系統中關於物理內存和虛擬內存相關信息。

物理內存和虛擬內存區別:

我們知道,直接從物理內存讀寫數據要比從硬碟讀寫數據要快的多,因此,我們希望所有數據的讀取和寫入都在內存完成,而內存是有限的,這樣就引出了物理內存與虛擬內存的概念。

物理內存就是系統硬體提供的內存大小,是真正的內存,相對於物理內存,在linux下還有一個虛擬內存的概念,虛擬內存就是為了滿足物理內存的不足而提出的策略,它是利用磁碟空間虛擬出的一塊邏輯內存,用作虛擬內存的磁碟空間被稱為交換空間(Swap Space)。

作為物理內存的擴展,linux會在物理內存不足時,使用交換分區的虛擬內存,更詳細的說,就是內核會將暫時不用的內存塊信息寫到交換空間,這樣以來,物理內存得到了釋放,這塊內存就可以用於其它目的,當需要用到原始的內容時,這些信息會被重新從交換空間讀入物理內存。

linux的內存管理採取的是分頁存取機制,為了保證物理內存能得到充分的利用,內核會在適當的時候將物理內存中不經常使用的數據塊自動交換到虛擬內存中,而將經常使用的信息保留到物理內存。

要深入了解linux內存運行機制,需要知道下面提到的幾個方面:

首先,Linux系統會不時的進行頁面交換操作,以保持盡可能多的空閑物理內存,即使並沒有什麼事情需要內存,Linux也會交換出暫時不用的內存頁面。這可以避免等待交換所需的時間。

其次,linux進行頁面交換是有條件的,不是所有頁面在不用時都交換到虛擬內存,linux內核根據」最近最經常使用「演算法,僅僅將一些不經常使用的頁面文件交換到虛擬內存,有時我們會看到這么一個現象:linux物理內存還有很多,但是交換空間也使用了很多。其實,這並不奇怪,例如,一個佔用很大內存的進程運行時,需要耗費很多內存資源,此時就會有一些不常用頁面文件被交換到虛擬內存中,但後來這個佔用很多內存資源的進程結束並釋放了很多內存時,剛才被交換出去的頁面文件並不會自動的交換進物理內存,除非有這個必要,那麼此刻系統物理內存就會空閑很多,同時交換空間也在被使用,就出現了剛才所說的現象了。關於這點,不用擔心什麼,只要知道是怎麼一回事就可以了。

最後,交換空間的頁面在使用時會首先被交換到物理內存,如果此時沒有足夠的物理內存來容納這些頁面,它們又會被馬上交換出去,如此以來,虛擬內存中可能沒有足夠空間來存儲這些交換頁面,最終會導致linux出現假死機、服務異常等問題,linux雖然可以在一段時間內自行恢復,但是恢復後的系統已經基本不可用了。

因此,合理規劃和設計linux內存的使用,是非常重要的。

虛擬內存原理:

在系統中運行的每個進程都需要使用到內存,但不是每個進程都需要每時每刻使用系統分配的內存空間。當系統運行所需內存超過實際的物理內存,內核會釋放某些進程所佔用但未使用的部分或所有物理內存,將這部分資料存儲在磁碟上直到進程下一次調用,並將釋放出的內存提供給有需要的進程使用。

在Linux內存管理中,主要是通過「調頁Paging」和「交換Swapping」來完成上述的內存調度。調頁演算法是將內存中最近不常使用的頁面換到磁碟上,把活動頁面保留在內存中供進程使用。交換技術是將整個進程,而不是部分頁面,全部交換到磁碟上。

分頁(Page)寫入磁碟的過程被稱作Page-Out,分頁(Page)從磁碟重新回到內存的過程被稱作Page-In。當內核需要一個分頁時,但發現此分頁不在物理內存中(因為已經被Page-Out了),此時就發生了分頁錯誤(Page Fault)。

當系統內核發現可運行內存變少時,就會通過Page-Out來釋放一部分物理內存。經管Page-Out不是經常發生,但是如果Page-out頻繁不斷的發生,直到當內核管理分頁的時間超過運行程式的時間時,系統效能會急劇下降。這時的系統已經運行非常慢或進入暫停狀態,這種狀態亦被稱作thrashing(顛簸)。

總結:物理內存就是硬體提供的真實的內存,比如我們電腦內存不夠了,就會加一個內存條
虛擬內存就是從磁碟上虛擬出來的一塊邏輯內存,用做虛擬內存的磁碟空間被稱為交換空間(Swap Space
經常使用的文件會優先放在物理內存,不經常使用的文件會放到虛擬內存裡面。

閱讀全文

與linux虛擬內存管理相關的資料

熱點內容
位位用車app在哪裡下載 瀏覽:427
格式工廠iphone鈴聲 瀏覽:171
linux設置字元編碼 瀏覽:15
帝王世紀升級哪個兵種 瀏覽:409
c編程開發軟體是什麼 瀏覽:334
二的大寫怎麼寫app 瀏覽:612
樂視數據刪除了怎麼找回來 瀏覽:651
ug編程初始化怎麼辦 瀏覽:295
nginxajax配置文件 瀏覽:467
小程序獲取二進制圖片 瀏覽:206
為什麼有的數控車編程有百分號 瀏覽:425
m文件有什麼用 瀏覽:359
宜昌做投標文件多少錢 瀏覽:166
uc瀏覽器小說下載那個文件夾 瀏覽:908
qq和手機 瀏覽:238
ps備份文件教程 瀏覽:306
資料庫原理嵌套查詢 瀏覽:679
為什麼文件只解壓了一部分 瀏覽:728
c語言課程教學視頻java源碼下載 瀏覽:444
老毛桃2014u盤啟動盤製作教程 瀏覽:53

友情鏈接