溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

linux物理內(nèi)存的概念是什么

發(fā)布時間:2023-03-02 11:03:19 來源:億速云 閱讀:124 作者:iii 欄目:建站服務(wù)器

這篇文章主要介紹“l(fā)inux物理內(nèi)存的概念是什么”,在日常操作中,相信很多人在linux物理內(nèi)存的概念是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”linux物理內(nèi)存的概念是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

在linux中,物理內(nèi)存是指系統(tǒng)硬件提供的內(nèi)存大小,是真實(shí)的內(nèi)存。Linux的內(nèi)存管理采取的是分頁存取機(jī)制,為了保證物理內(nèi)存能得到充分的利用,內(nèi)核會在適當(dāng)?shù)臅r候?qū)⑽锢韮?nèi)存中不經(jīng)常使用的數(shù)據(jù)塊自動交換到虛擬內(nèi)存中,而將經(jīng)常使用的信息保留到物理內(nèi)存。

Linux中的虛擬內(nèi)存和物理內(nèi)存

我們都知道,直接從內(nèi)存讀寫數(shù)據(jù)要比從硬盤讀寫數(shù)據(jù)快得多,因此更希望所有數(shù)據(jù)的讀取和寫入都在內(nèi)存中完成,然而內(nèi)存是有限的,這樣就引出了物理內(nèi)存與虛擬內(nèi)存的概念。

物理內(nèi)存就是系統(tǒng)硬件提供的內(nèi)存大小,是真正的內(nèi)存。相對于物理內(nèi)存,在 Linux 下還有一個虛擬內(nèi)存的概念,虛擬內(nèi)存是為了滿足物理內(nèi)存的不足而提出的策略,它是利用磁盤空間虛擬出的一塊邏輯內(nèi)存。用作虛擬內(nèi)存的磁盤空間被稱為交換空間(又稱 swap 空間)。

作為物理內(nèi)存的擴(kuò)展,Linux 會在物理內(nèi)存不足時,使用交換分區(qū)的虛擬內(nèi)存,更詳細(xì)地說,就是內(nèi)核會將暫時不用的內(nèi)存塊信息寫到交換空間,這樣一來,物理內(nèi)存得到了釋放,這塊內(nèi)存就可以用于其他目的,當(dāng)需要用到原始的內(nèi)容時,這些信息會被重新從交換空間讀入物理內(nèi)存。

Linux 的內(nèi)存管理采取的是分頁存取機(jī)制,為了保證物理內(nèi)存能得到充分的利用,內(nèi)核會在適當(dāng)?shù)臅r候?qū)⑽锢韮?nèi)存中不經(jīng)常使用的數(shù)據(jù)塊自動交換到虛擬內(nèi)存中,而將經(jīng)常使用的信息保留到物理內(nèi)存。

要深入了解 Linux 內(nèi)存運(yùn)行機(jī)制,需要知道下面提到的幾個方面:

  • 首先,Linux 系統(tǒng)會不時地進(jìn)行頁面交換操作,以保持盡可能多的空閑物理內(nèi)存,即使并沒有什么事情需要內(nèi)存,Linux 也會交換出暫時不用的內(nèi)存頁面,因為這樣可以大大節(jié)省等待交換所需的時間。

  • 其次,Linux 進(jìn)行頁面交換是有條件的,不是所有頁面在不用時都交換到虛擬內(nèi)存,Linux 內(nèi)核根據(jù)“最近最經(jīng)常使用”算法,僅僅將一些不經(jīng)常使用的頁面文件交換到虛擬內(nèi)存。

有時我們會看到這么一個現(xiàn)象,Linux 物理內(nèi)存還有很多,但是交換空間也使用了很多,其實(shí)這并不奇怪。例如,一個占用很大內(nèi)存的進(jìn)程運(yùn)行時,需要耗費(fèi)很多內(nèi)存資源,此時就會有一些不常用頁面文件被交換到虛擬內(nèi)存中,但后來這個占用很多內(nèi)存資源的進(jìn)程結(jié)束并釋放了很多內(nèi)存時,剛才被交換出去的頁面文件并不會自動交換進(jìn)物理內(nèi)存(除非有這個必要),那么此時系統(tǒng)物理內(nèi)存就會空閑很多,同時交換空間也在被使用,就出現(xiàn)了剛才所說的現(xiàn)象了。

最后,交換空間的頁面在使用時會首先被交換到物理內(nèi)存,如果此時沒有足夠的物理內(nèi)存來容納這些頁面,它們又會被馬上交換出去,如此一來,虛擬內(nèi)存中可能沒有足夠的空間來存儲這些交換頁面,最終會導(dǎo)致 Linux 出現(xiàn)假死機(jī)、服務(wù)異常等問題。Linux 雖然可以在一段時間內(nèi)自行恢復(fù),但是恢復(fù)后的系統(tǒng)己經(jīng)基本不可用了。

因此,合理規(guī)劃和設(shè)計 Linux 內(nèi)存的使用是非常重要的,關(guān)于物理內(nèi)存和交換空間的大小設(shè)置問題,取決于實(shí)際所用的硬盤大小,但大致遵循這樣一個基本原則:

  • 如果內(nèi)存較?。ǜ鶕?jù)經(jīng)驗,物理內(nèi)存小于 4GB),一般設(shè)置 swap 分區(qū)大小為內(nèi)存的 2 倍;

  • 如果物理內(nèi)存大于 4GB,而小于 16GB,可以設(shè)置 swap 分區(qū)大小等于物理內(nèi)存;

  • 如果內(nèi)存大小在 16GB 以上,可以設(shè)置 swap 為 0,但并不建議這么做,因為設(shè)置一定大小的 swap 分區(qū)是有一定作用的。

Linux系統(tǒng)查看內(nèi)存使用情況

Windows及帶有GUI的Linux操作系統(tǒng)中,我們通??梢允褂肬I查看系統(tǒng)內(nèi)存及空間使用情況,但是對于開發(fā)或者運(yùn)維人員來說,經(jīng)常要工作在沒有GUI的Linux的服務(wù)器,命令行能比GUI提供更多功能和靈活性。

特別當(dāng)我們的系統(tǒng)中某個應(yīng)用程序異常,或者系統(tǒng)占用異常,抑或linux開發(fā)需要內(nèi)存裁剪時,我們就要了解下系統(tǒng)內(nèi)存及空間使用情況,就需要掌握幾個常用的查看工具。

常用命令

  • 查看內(nèi)存使用情況:free

  • 顯示進(jìn)程信息(包括CPU、內(nèi)存使用等信息):top、ps

  • 查看驅(qū)動占用內(nèi)存:lsmod

1 查看系統(tǒng)內(nèi)存free

free命令可以顯示當(dāng)前系統(tǒng)未使用的和已使用的內(nèi)存大小,還可以顯示被內(nèi)核使用的內(nèi)存緩沖區(qū)。在終端中輸入free(參數(shù)稍后說明)可以看到我們服務(wù)器內(nèi)存情況,如下:
linux物理內(nèi)存的概念是什么

1.1詳細(xì)說明如下:

Mem: 內(nèi)存的使用信息
Swap: 交換空間的使用信息

total:總計物理內(nèi)存的大小。
used:已使用物理內(nèi)存。
free:可用物理內(nèi)存。
shared:多個進(jìn)程共享的內(nèi)存總額。
buffers/cached:緩存緩沖使用物理內(nèi)存大小。
available:還可以被應(yīng)用程序使用的物理內(nèi)存大小。

1.2 各物理內(nèi)存之間的關(guān)系

total = used + free + buffer/cache
avaiable = free + buffer/cache(一般來說是這樣,個人電腦是這樣,但服務(wù)器或者公共云普通用戶有部分buffer/cache是用不了的就會有avaiable < free + buffer/cache)

1.3 free與available的區(qū)別

free是正在未被使用的內(nèi)存
available是應(yīng)用程序認(rèn)為可用的內(nèi)存
Linux為了提升讀寫性能,消耗一部分內(nèi)存資源作為緩存或者緩沖內(nèi)存,在內(nèi)核看來這部分buffer/cache屬于已被使用的內(nèi)存;在應(yīng)用程序申請內(nèi)存,而free內(nèi)存不夠時,就會讓內(nèi)核回收buffer和cache來滿足應(yīng)用程序的內(nèi)存需求。

1.4buff和cache的區(qū)別

buffers和cache是有一定區(qū)別的:

  • A buffer is something that has yet to be “written” to disk.  —buffer 寫緩存,數(shù)據(jù)存儲時,先保存到磁盤緩沖區(qū),然后再寫入到永久空間

  • A cache is something that has been “reed” from the disk adn stored for later use. --cache 讀緩存,數(shù)據(jù)從磁盤讀出后,暫留在緩沖區(qū),預(yù)備程序接下來的使用。

1.5 free參數(shù)說明

free命令下顯示的單位是k,可以在free后面加上-m(即free -m)顯示單位為Mb,如下圖:
linux物理內(nèi)存的概念是什么
可以通過free --help查看free的詳細(xì)命令:
linux物理內(nèi)存的概念是什么

通過free -h可以自動匹配適合人閱讀習(xí)慣的單位,其中h是humanity之意。

ps:
第3行swap為交換分區(qū),類似windows系統(tǒng)中的虛擬內(nèi)存,當(dāng)內(nèi)存不足的時候,把一部分硬盤空間虛擬成內(nèi)存使用,從而解決內(nèi)存容量不足的情況。

2 查看進(jìn)程占用內(nèi)存

  • top命令可以實(shí)時動態(tài)地查看系統(tǒng)的整體運(yùn)行情況,是一個綜合了多方信息監(jiān)測系統(tǒng)性能和運(yùn)行信息的實(shí)用工具。通過top命令可以有效的發(fā)現(xiàn)系統(tǒng)的缺陷出在哪里,如內(nèi)存不夠、CPU處理能力不夠、IO讀寫過高等。通過top命令所提供的互動式界面,用熱鍵可以管理。
    相關(guān)語法:top -X

-b:以批處理模式操作;
-c:顯示完整的治命令;
-d:屏幕刷新間隔時間;
-I:忽略失效過程;
-s:保密模式;
-S:累積模式;
-i<時間>:設(shè)置間隔時間;
-u<用戶名>:指定用戶名;
-p<進(jìn)程號>:指定進(jìn)程;
-n<次數(shù)>:循環(huán)顯示的次數(shù)。

  • 在top命令執(zhí)行過程中可以使用的一些交互命令。這些命令都是單字母的,如果在命令行中使用了-s選項, 其中一些命令可能會被屏蔽。交互命令如下:

h:顯示幫助畫面,給出一些簡短的命令總結(jié)說明;
k:終止一個進(jìn)程;
i:忽略閑置和僵死進(jìn)程,這是一個開關(guān)式命令;
q:退出程序;
r:重新安排一個進(jìn)程的優(yōu)先級別;
S:切換到累計模式;
s:改變兩次刷新之間的延遲時間(單位為s),如果有小數(shù),就換算成ms。輸入0值則系統(tǒng)將不斷刷新,默認(rèn)值是5s;
f或者F:從當(dāng)前顯示中添加或者刪除項目;
o或者O:改變顯示項目的順序;
l:切換顯示平均負(fù)載和啟動時間信息;
m:切換顯示內(nèi)存信息;
t:切換顯示進(jìn)程和CPU狀態(tài)信息;
c:切換顯示命令名稱和完整命令行;
M:根據(jù)駐留內(nèi)存大小進(jìn)行排序;
P:根據(jù)CPU使用百分比大小進(jìn)行排序;
T:根據(jù)時間/累計時間進(jìn)行排序;
w:將當(dāng)前設(shè)置寫入~/.toprc文件中。

  • 直接在終端中輸入top指令,可以看到如下界面

linux物理內(nèi)存的概念是什么

2.1 top命令的第一到第五行的詳細(xì)說明如下:

top - 10:14:31 當(dāng)前系統(tǒng)時間
up 3 days, 22:36 系統(tǒng)已經(jīng)運(yùn)行了3天22h46min
1 users 共有1個用戶為登錄狀態(tài)
load average: 0.57, 0.74, 0.65 系統(tǒng)負(fù)載,即任務(wù)隊列的平均長度,load average后面的三個數(shù)字分別表示距離現(xiàn)在一分鐘,五分鐘,十五分鐘的負(fù)載情況。
注意:load average數(shù)據(jù)是每隔5秒鐘檢查一次活躍的進(jìn)程數(shù),然后按特定算法計算出的數(shù)值。如果這個數(shù)除以邏輯CPU的數(shù)量,結(jié)果高于5的時候就表明系統(tǒng)在超負(fù)荷運(yùn)轉(zhuǎn)了。

Tasks: 322 total 總進(jìn)程數(shù)
2 running 正在運(yùn)行的進(jìn)程數(shù)
320 sleeping 睡眠的進(jìn)程數(shù)
0 stopped 停止的進(jìn)程數(shù)
0 zombie 凍結(jié)進(jìn)程數(shù)
%Cpu(s): 2.7 us, 用戶空間占用CPU百分比(用戶態(tài)使用CPU占比)
2.7 sy 內(nèi)核空間占用CPU百分比 (系統(tǒng)態(tài)使用CPU占比)
0.0 ni 用做nice加權(quán)的進(jìn)程分配的用戶態(tài)cpu時間比
94.0 id 空閑的cpu時間比
0.0 wa IO wait ,cpu等待磁盤寫入完成時間
0.0 hi Hardware IRQ,硬中斷消耗時間
0.0 si Software IRQ,軟中斷消耗時間
0.7 st 被hypervisor(管理程序,一般為服務(wù)器或者虛擬機(jī))偷取時間
MiB Mem : 11995.2 total 物理內(nèi)存總量,單位:Mb
360.9 free 空閑內(nèi)存總量
6766.0 used 使用的物理內(nèi)存總量,此處需要注意的是:used實(shí)際指的是現(xiàn)在系統(tǒng)內(nèi)核控制的內(nèi)存數(shù),空閑內(nèi)存總量(free)是內(nèi)核還未納入其管控范圍的數(shù)量。納入內(nèi)核管理的內(nèi)存不見得都在使用中,還包括過去使用過的現(xiàn)在可以被重復(fù)利用的內(nèi)存,內(nèi)核并不把這些可被重新使用的內(nèi)存交還到free中去,因此在linux上free內(nèi)存會越來越少,但不用為此擔(dān)心。
4868.3+buff/cache 用作內(nèi)核緩存的內(nèi)存量
MiB Swap: 7680.0 total 交換區(qū)總量
7433.1 free 空閑交換區(qū)總量
246.9 used 使用的交換區(qū)總量
3665.4 avail Mem 在不交換的情況下,對啟動新應(yīng)用程序可用內(nèi)存的估計
(網(wǎng)上也有說法是交換區(qū)的可用容量)
top命令第六行為空。
top命令第七行是各個進(jìn)程的監(jiān)控:

從左到右依次為:

PID — 進(jìn)程id
USER — 進(jìn)程所有者
PR — 進(jìn)程優(yōu)先級
NI — nice值。負(fù)值表示高優(yōu)先級,正值表示低優(yōu)先級
VIRT — 進(jìn)程使用的虛擬內(nèi)存總量,單位kb。VIRT=SWAP+RES
RES — 進(jìn)程使用的、未被換出的物理內(nèi)存大小,單位kb。RES=CODE+DATA
SHR — 共享內(nèi)存大小,單位kb
S — 進(jìn)程狀態(tài)。D=不可中斷的睡眠狀態(tài) R=運(yùn)行 S=睡眠 T=跟蹤/停止 Z=僵尸進(jìn)程
%CPU — 上次更新到現(xiàn)在的CPU時間占用百分比
%MEM — 進(jìn)程使用的物理內(nèi)存百分比
TIME+ — 進(jìn)程使用的CPU時間總計,單位1/100秒
COMMAND — 進(jìn)程名稱(命令名/命令行)

需要注意的是,此界面顯示的并不是所有進(jìn)程,由于頁面顯示限制僅僅顯示了這幾行,我們可以通過top -b -n 1查看系統(tǒng)的所有進(jìn)程的快照。

3查看內(nèi)核占用內(nèi)存

命令:cat /proc/meminfo
linux物理內(nèi)存的概念是什么

注:initrd和初始化代碼init在引導(dǎo)完成之后會被釋放掉,所以最終的內(nèi)核可管理內(nèi)存(total)會比dmesg顯示的available更多一點(diǎn),相應(yīng)的源代碼可參見: free_initrd_mem() 和 free_initmem()。
優(yōu)化可以主要從優(yōu)化保留內(nèi)存和優(yōu)化used內(nèi)存兩個方面進(jìn)行,具體的需要結(jié)合代碼。
查看磁盤命令比較多,最常用的為: df -lh 命令

4 lsmod查看驅(qū)動占用內(nèi)存

命令:lsmod
linux物理內(nèi)存的概念是什么

  • 功能:
    列出已加載的模塊,以友好的方式顯示/proc/modules的內(nèi)容

  • 格式:
    第一列:Module表示模塊的名稱,如sysDebug
    第二列:Size表示模塊大小,單位:byte
    第三列:Used 表示依賴的模塊個數(shù)
    第四列:by表示依賴的模塊內(nèi)容

  • 示例:
    lsmod|grep -i ext3 //查看當(dāng)前系統(tǒng)是否加載ext3驅(qū)動模塊

到此,關(guān)于“l(fā)inux物理內(nèi)存的概念是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI