使用 top 命令瞭解 Fedora 的記憶體使用情況

Paul W. Frields發表於2018-09-26

如果你使用過 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中國 榮譽推出

相關文章