? ? ?如果你使用過?top?命令來查看 Fedora 系統(tǒng)中的內(nèi)存使用情況,你可能會(huì)驚訝,看起來消耗的數(shù)量比系統(tǒng)可用的內(nèi)存更多。下面會(huì)詳細(xì)介紹內(nèi)存使用情況以及如何理解這些數(shù)據(jù)。
內(nèi)存實(shí)際使用情況
操作系統(tǒng)對(duì)內(nèi)存的使用方式并不是太通俗易懂。事實(shí)上,其背后有很多不為人知的巧妙技術(shù)在發(fā)揮著作用。通過這些方式,可以在無需用戶干預(yù)的情況下,讓操作系統(tǒng)更有效地使用內(nèi)存。
?大多數(shù)應(yīng)用程序都不是系統(tǒng)自帶的,但每個(gè)應(yīng)用程序都依賴于安裝在系統(tǒng)中的庫中的一些函數(shù)集。在 Fedora 中,RPM 包管理系統(tǒng)能夠確保在安裝應(yīng)用程序時(shí)也會(huì)安裝所依賴的庫。
當(dāng)應(yīng)用程序運(yùn)行時(shí),操作系統(tǒng)并不需要將它要用到的所有信息都加載到物理內(nèi)存中。而是會(huì)為存放代碼的存儲(chǔ)空間構(gòu)建一個(gè)映射,稱為虛擬內(nèi)存。操作系統(tǒng)只把需要的部分加載到內(nèi)存中,當(dāng)某一個(gè)部分不再需要后,這一部分內(nèi)存就會(huì)被釋放掉。
這意味著應(yīng)用程序可以映射大量的虛擬內(nèi)存,而使用較少的系統(tǒng)物理內(nèi)存。特殊情況下,映射的虛擬內(nèi)存甚至可以比系統(tǒng)實(shí)際可用的物理內(nèi)存更多!而且在操作系統(tǒng)中這種情況也并不少見。
另外,不同的應(yīng)用程序可能會(huì)對(duì)同一個(gè)庫都有依賴。Fedora 中的 Linux 內(nèi)核通常會(huì)在各個(gè)應(yīng)用程序之間共享內(nèi)存,而不需要為不同應(yīng)用分別加載同一個(gè)庫的多個(gè)副本。類似地,對(duì)于同一個(gè)應(yīng)用程序的不同實(shí)例也是采用這種方式共享內(nèi)存。
如果不首先了解這些細(xì)節(jié),top?命令顯示的數(shù)據(jù)可能會(huì)讓人摸不著頭腦。下面就舉例說明如何正確查看內(nèi)存使用量。
使用?top?命令查看內(nèi)存使用量
如果你還沒有使用過?top?命令,可以打開終端直接執(zhí)行查看。使用?Shift + M?可以按照內(nèi)存使用量來進(jìn)行排序。下圖是在 Fedora Workstation 中執(zhí)行的結(jié)果,在你的機(jī)器上顯示的結(jié)果可能會(huì)略有不同:

主要通過以下三列來查看內(nèi)存使用情況:VIRT、RES?和?SHR。目前以 KB 為單位顯示相關(guān)數(shù)值。
VIRT?列代表該進(jìn)程映射的?虛擬virtual?內(nèi)存。如上所述,虛擬內(nèi)存不是實(shí)際消耗的物理內(nèi)存。例如, GNOME Shell 進(jìn)程?gnome-shell?實(shí)際上沒有消耗超過 3.1 GB 的物理內(nèi)存,但它對(duì)很多更低或更高級(jí)的庫都有依賴,系統(tǒng)必須對(duì)每個(gè)庫都進(jìn)行映射,以確保在有需要時(shí)可以加載這些庫。
RES?列代表應(yīng)用程序消耗了多少實(shí)際(駐留resident)內(nèi)存。對(duì)于 GNOME Shell 大約是 180788 KB。例子中的系統(tǒng)擁有大約 7704 MB 的物理內(nèi)存,因此內(nèi)存使用率顯示為 2.3%。
但根據(jù)?SHR?列顯示,其中至少有 88212 KB 是?共享shared?內(nèi)存,這部分內(nèi)存可能是其它應(yīng)用程序也在使用的庫函數(shù)。這意味著 GNOME Shell 本身大約有 92 MB 內(nèi)存不與其他進(jìn)程共享。需要注意的是,上述例子中的其它程序也共享了很多內(nèi)存。在某些應(yīng)用程序中,共享內(nèi)存在內(nèi)存使用量中會(huì)占很大的比例。
值得一提的是,有時(shí)進(jìn)程之間通過內(nèi)存通信,這些內(nèi)存也是共享的,但?top?這樣的工具卻不一定能檢測(cè)到,所以以上的說明也不一定準(zhǔn)確。
關(guān)于交換分區(qū)
系統(tǒng)還可以通過交換分區(qū)來存儲(chǔ)數(shù)據(jù)(例如硬盤),但讀寫的速度相對(duì)較慢。當(dāng)物理內(nèi)存漸漸用滿,操作系統(tǒng)就會(huì)查找內(nèi)存中暫時(shí)不會(huì)使用的部分,將其寫出到交換區(qū)域等待需要的時(shí)候使用。
因此,如果交換內(nèi)存的使用量一直偏高,表明系統(tǒng)的物理內(nèi)存已經(jīng)供不應(yīng)求了。有時(shí)候一個(gè)不正常的應(yīng)用也有可能導(dǎo)致出現(xiàn)這種情況,但如果這種現(xiàn)象經(jīng)常出現(xiàn),就需要考慮提升物理內(nèi)存或者限制某些程序的運(yùn)行了。
?
電子發(fā)燒友App

















評(píng)論