使用 top 命令瞭解 Fedora 的記憶體使用情況
如果你使用過 top
命令來檢視 Fedora 系統中的記憶體使用情況,你可能會驚訝,看起來消耗的數量比系統可用的記憶體更多。下面會詳細介紹記憶體使用情況以及如何理解這些資料。
記憶體實際使用情況
作業系統對記憶體的使用方式並不是太通俗易懂。事實上,其背後有很多不為人知的巧妙技術在發揮著作用。通過這些方式,可以在無需使用者干預的情況下,讓作業系統更有效地使用記憶體。
大多數應用程式都不是系統自帶的,但每個應用程式都依賴於安裝在系統中的庫中的一些函式集。在 Fedora 中,RPM 包管理系統能夠確保在安裝應用程式時也會安裝所依賴的庫。
當應用程式執行時,作業系統並不需要將它要用到的所有資訊都載入到實體記憶體中。而是會為存放程式碼的儲存空間構建一個對映,稱為虛擬記憶體。作業系統只把需要的部分載入到記憶體中,當某一個部分不再需要後,這一部分記憶體就會被釋放掉。
這意味著應用程式可以對映大量的虛擬記憶體,而使用較少的系統實體記憶體。特殊情況下,對映的虛擬記憶體甚至可以比系統實際可用的實體記憶體更多!而且在作業系統中這種情況也並不少見。
另外,不同的應用程式可能會對同一個庫都有依賴。Fedora 中的 Linux 核心通常會在各個應用程式之間共享記憶體,而不需要為不同應用分別載入同一個庫的多個副本。類似地,對於同一個應用程式的不同例項也是採用這種方式共享記憶體。
如果不首先了解這些細節,top
命令顯示的資料可能會讓人摸不著頭腦。下面就舉例說明如何正確檢視記憶體使用量。
使用 top
命令檢視記憶體使用量
如果你還沒有使用過 top
命令,可以開啟終端直接執行檢視。使用 Shift + M
可以按照記憶體使用量來進行排序。下圖是在 Fedora Workstation 中執行的結果,在你的機器上顯示的結果可能會略有不同:
主要通過以下三列來檢視記憶體使用情況:VIRT
、RES
和 SHR
。目前以 KB 為單位顯示相關數值。
VIRT
列代表該程式對映的虛擬記憶體。如上所述,虛擬記憶體不是實際消耗的實體記憶體。例如, GNOME Shell 程式 gnome-shell
實際上沒有消耗超過 3.1 GB 的實體記憶體,但它對很多更低或更高階的庫都有依賴,系統必須對每個庫都進行對映,以確保在有需要時可以載入這些庫。
RES
列代表應用程式消耗了多少實際(駐留)記憶體。對於 GNOME Shell 大約是 180788 KB。例子中的系統擁有大約 7704 MB 的實體記憶體,因此記憶體使用率顯示為 2.3%。
但根據 SHR
列顯示,其中至少有 88212 KB 是共享記憶體,這部分記憶體可能是其它應用程式也在使用的庫函式。這意味著 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
相關文章
- 使用 vmstat 命令確定記憶體使用情況記憶體
- 檢查 Linux 中記憶體使用情況的 8 條命令Linux記憶體
- Linux檢視伺服器記憶體使用情況的命令Linux伺服器記憶體
- Linux效能優化:記憶體使用情況分析Linux優化記憶體
- Linux 檢視記憶體使用情況的幾種方法Linux記憶體
- 使用show engine innodb status 檢視記憶體使用情況記憶體
- Redis 記憶體突增時,如何定量分析其記憶體使用情況Redis記憶體
- linux 檢視某個程序和服務記憶體佔用情況命令Linux記憶體
- 檢視LINUX程式記憶體佔用情況Linux記憶體
- 用 Bash 指令碼監控 Linux 上的記憶體使用情況指令碼Linux記憶體
- obukhov/redis-inventory: 分析redis記憶體使用情況的CLI工具Redis記憶體
- java程式碼實現檢視Tomcat記憶體使用情況JavaTomcat記憶體
- Linux系統下分析記憶體使用情況的管理工具Linux記憶體
- 總結Linux下檢視記憶體使用情況的多種方法Linux記憶體
- 檢視 Linux 系統中程序和使用者的記憶體使用情況Linux記憶體
- PowerShell 指令碼來監控 CPU、記憶體和磁碟使用情況:指令碼記憶體
- 在Linux中,如何檢查系統的CPU和記憶體使用情況?Linux記憶體
- 使用netstat命令檢視埠的使用情況
- 監控 Python 記憶體使用情況和程式碼執行時間!Python記憶體
- 如何使用 Bash 指令碼從 SAR 報告中獲取 CPU 和記憶體使用情況指令碼記憶體
- 虛擬記憶體系統——瞭解記憶體的工作原理記憶體
- 利用Bash指令碼監控Linux伺服器的記憶體使用情況的相關資料指令碼Linux伺服器記憶體
- Dutree – Linux上的命令列磁碟使用情況分析工具Linux命令列
- 監控JVM記憶體使用情況,剩餘空間小於2M時報警JVM記憶體
- 如何檢視Linux的記憶體使用狀況Linux記憶體
- 深入瞭解 JavaScript 記憶體洩漏JavaScript記憶體
- 筆記-更深層次的瞭解iOS記憶體管理筆記iOS記憶體
- 05記憶體情況記憶體
- 深入瞭解一下Redis的記憶體模型!Redis記憶體模型
- 監視磁碟使用情況
- Linux中監控磁碟分割槽及使用情況的命令有哪些?Linux
- 如何使用du 和 ncdu 兩個命令檢查 Linux 磁碟使用情況?Linux
- 全快閃記憶體陣列供應商TOP 10,挨個瞭解一下記憶體陣列
- 你瞭解Java記憶體模型麼(Java7、8、9記憶體模型的區別)Java記憶體模型
- Fedora 上的桌面環境記憶體佔用測試記憶體
- 你真的瞭解Java記憶體模型JMM嗎?Java記憶體模型
- 用以檢查Linux記憶體使用的5個命令Linux記憶體
- Oracle 歸檔使用情況分析Oracle