Linux中國

使用 top 命令了解 Fedora 的內存使用情況

如果你使用過 top 命令來查看 Fedora 系統中的內存使用情況,你可能會驚訝,看起來消耗的數量比系統可用的內存更多。下面會詳細介紹內存使用情況以及如何理解這些數據。

內存實際使用情況

操作系統對內存的使用方式並不是太通俗易懂。事實上,其背後有很多不為人知的巧妙技術在發揮著作用。通過這些方式,可以在無需用戶干預的情況下,讓操作系統更有效地使用內存。

大多數應用程序都不是系統自帶的,但每個應用程序都依賴於安裝在系統中的庫中的一些函數集。在 Fedora 中,RPM 包管理系統能夠確保在安裝應用程序時也會安裝所依賴的庫。

當應用程序運行時,操作系統並不需要將它要用到的所有信息都載入到物理內存中。而是會為存放代碼的存儲空間構建一個映射,稱為虛擬內存。操作系統只把需要的部分載入到內存中,當某一個部分不再需要後,這一部分內存就會被釋放掉。

這意味著應用程序可以映射大量的虛擬內存,而使用較少的系統物理內存。特殊情況下,映射的虛擬內存甚至可以比系統實際可用的物理內存更多!而且在操作系統中這種情況也並不少見。

另外,不同的應用程序可能會對同一個庫都有依賴。Fedora 中的 Linux 內核通常會在各個應用程序之間共享內存,而不需要為不同應用分別載入同一個庫的多個副本。類似地,對於同一個應用程序的不同實例也是採用這種方式共享內存。

如果不首先了解這些細節,top 命令顯示的數據可能會讓人摸不著頭腦。下面就舉例說明如何正確查看內存使用量。

使用 top 命令查看內存使用量

如果你還沒有使用過 top 命令,可以打開終端直接執行查看。使用 Shift + M 可以按照內存使用量來進行排序。下圖是在 Fedora Workstation 中執行的結果,在你的機器上顯示的結果可能會略有不同:

主要通過以下三列來查看內存使用情況:VIRTRESSHR。目前以 KB 為單位顯示相關數值。

VIRT 列代表該進程映射的 虛擬 virtual 內存。如上所述,虛擬內存不是實際消耗的物理內存。例如, GNOME Shell 進程 gnome-shell 實際上沒有消耗超過 3.1 GB 的物理內存,但它對很多更低或更高級的庫都有依賴,系統必須對每個庫都進行映射,以確保在有需要時可以載入這些庫。

RES 列代表應用程序消耗了多少實際( 駐留 resident )內存。對於 GNOME Shell 大約是 180788 KB。例子中的系統擁有大約 7704 MB 的物理內存,因此內存使用率顯示為 2.3%。

但根據 SHR 列顯示,其中至少有 88212 KB 是 共享 shared 內存,這部分內存可能是其它應用程序也在使用的庫函數。這意味著 GNOME Shell 本身大約有 92 MB 內存不與其他進程共享。需要注意的是,上述例子中的其它程序也共享了很多內存。在某些應用程序中,共享內存在內存使用量中會佔很大的比例。

值得一提的是,有時進程之間通過內存通信,這些內存也是共享的,但 top 這樣的工具卻不一定能檢測到,所以以上的說明也不一定準確。

關於交換分區

系統還可以通過交換分區來存儲數據(例如硬碟),但讀寫的速度相對較慢。當物理內存漸漸用滿,操作系統就會查找內存中暫時不會使用的部分,將其寫出到交換區域等待需要的時候使用。

因此,如果交換內存的使用量一直偏高,表明系統的物理內存已經供不應求了。有時候一個不正常的應用也有可能導致出現這種情況,但如果這種現象經常出現,就需要考慮提升物理內存或者限制某些程序的運行了。

感謝 Stig NygaardFlickr 上提供的圖片(CC BY 2.0)。

via: https://fedoramagazine.org/understand-fedora-memory-usage-top/

作者:Paul W. Frields 選題:lujun9972 譯者:HankChow 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國