2021-05-12 14:32:11
使用 top 命令了解 Fedora 的記憶體使用情況
如果你使用過 top
命令來檢視 Fedora 系統中的記憶體使用情況,你可能會驚訝,看起來消耗的數量比系統可用的記憶體更多。下面會詳細介紹記憶體使用情況以及如何理解這些資料。
記憶體實際使用情況
作業系統對記憶體的使用方式並不是太通俗易懂。事實上,其背後有很多不為人知的巧妙技術在發揮著作用。通過這些方式,可以在無需使用者干預的情況下,讓作業系統更有效地使用記憶體。
大多數應用程式都不是系統自帶的,但每個應用程式都依賴於安裝在系統中的庫中的一些函數集。在 Fedora 中,RPM 包管理系統能夠確保在安裝應用程式時也會安裝所依賴的庫。
當應用程式執行時,作業系統並不需要將它要用到的所有資訊都載入到實體記憶體中。而是會為存放程式碼的儲存空間構建一個對映,稱為虛擬記憶體。作業系統只把需要的部分載入到記憶體中,當某一個部分不再需要後,這一部分記憶體就會被釋放掉。
這意味著應用程式可以對映大量的虛擬記憶體,而使用較少的系統實體記憶體。特殊情況下,對映的虛擬記憶體甚至可以比系統實際可用的實體記憶體更多!而且在作業系統中這種情況也並不少見。
另外,不同的應用程式可能會對同一個庫都有依賴。Fedora 中的 Linux 核心通常會在各個應用程式之間共用記憶體,而不需要為不同應用分別載入同一個庫的多個副本。類似地,對於同一個應用程式的不同範例也是採用這種方式共用記憶體。
如果不首先了解這些細節,top
命令顯示的資料可能會讓人摸不著頭腦。下面就舉例說明如何正確檢視記憶體使用量。
使用 top
命令檢視記憶體使用量
如果你還沒有使用過 top
命令,可以開啟終端直接執行檢視。使用 Shift + M
可以按照記憶體使用量來進行排序。下圖是在 Fedora Workstation 中執行的結果,在你的機器上顯示的結果可能會略有不同:
主要通過以下三列來檢視記憶體使用情況:VIRT
、RES
和 SHR
。目前以 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 Nygaard 在 Flickr 上提供的圖片(CC BY 2.0)。
via: https://fedoramagazine.org/understand-fedora-memory-usage-top/
作者:Paul W. Frields 選題:lujun9972 譯者:HankChow 校對:wxy
相關文章