有很多方法可以讓您瞭解Linux系統記憶體使用情況。在本綜述中,我們將介紹最常用的命令列方法:free、vmstat和top。我們還將直接檢視reading/proc/meminfo。...
有很多方法可以讓您瞭解Linux系統記憶體使用情況。在本綜述中,我們將介紹最常用的命令列方法:free、vmstat和top。我們還將直接檢視reading/proc/meminfo。
linux如何使用ram
RAM是一種有限的資源,所有程序(如應用程式和守護程序)都需要它的一部分。只有這麼多了。核心判斷記憶體爭用,並將定量分配的記憶體分配給所有飢餓的程序。這有點像一隻母鳥,張開的喙指向她,而不是她的食物。
未使用的RAM是浪費的RAM。Linux使用任何空閒的RAM作為檔案緩衝區空間,以保持計算機以最佳效能執行。很容易產生這樣的印象:系統的RAM已經被一些失控的程序或記憶體洩漏所消耗,但這種情況很少發生。
它通常只是核心在後臺頑強地完成它的工作。如果核心為自己的裝置挖出了對RAM的其他需求,那麼它會立即放棄記憶體,這樣就不會造成傷害。
如果核心決定開始使用交換空間更有效,那麼它也會發揮作用。關於Linux中的swappeiss值以及核心何時開始使用swap有很多混淆。swapiness值為觸發swap的RAM使用設定了一個閾值,這是不真實的。
但是現在,讓我們看看在終端視窗中可以使用哪些不同的技術來檢視Linux計算機上RAM的使用情況。
自由命令
free命令為您提供一個表,其中列出了計算機上的總記憶體、已用記憶體、可用記憶體、共享記憶體、緩衝區/快取和可用記憶體。它還顯示配置的交換空間總量,以及已使用和可用的交換空間量。
在我們的示例中,我們將使用-m(mebibytes)選項。但是,也可以使用-b(位元組)、-k(kibibytes)或-g(gibibytes)。
我們鍵入以下命令:
free -m
這是我們得到的輸出:
total used free shared buff/cache available Mem: 1987 901 95 80 990 811 Swap: 1521 651 869
Mem列包含以下資訊:
- 總計:此計算機上物理RAM的總量。
- 已用:從總量中減去空閒+緩衝區+快取的總和。
- 空閒:未使用的記憶體量。
- 共享:tmpfs檔案系統使用的記憶體量。
- Buff/cache:用於緩衝區和快取的記憶體量。如果需要的話,核心可以快速地釋放它。
- 可用:這是對可用於處理來自應用程式和計算機上任何其他操作軟體的記憶體請求的記憶體的估計。
交換列包含以下資訊:
- 總計:交換分割槽或檔案的大小。
- 已用:正在使用的交換空間量。
- 空閒:剩餘(未使用)交換空間的數量。
您還可以使用我們從一個讀者那裡調整的以下妙招來檢視使用的交換空間百分比:
free -m | grep Swap | awk '{print ($3/$2)*100}'
相關:如何在Linux上使用free命令
vmstat命令
如果不瞭解交換空間的狀態,就不可能很好地理解Linux系統中RAM的使用方式。RAM和交換空間緊密配合。
您可以使用vmstat命令更深入地瞭解交換空間(或虛擬記憶體)的使用方式。它根據上次重新啟動後的平均值,為您提供有關各種與交換相關的統計資訊的報告。
鍵入以下內容:
vmstat
這是不帶環繞的輸出:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 3 0 671488 576084 51088 823876 1 7 53 62 99 14 4 1 95 0 0
該報告中有很多資料點,因此我們將對它們進行細分:
- Proc:
- r:“可執行”程序的數量。他們要麼在執行,要麼在等待下一次CPU週期的分片爆發。
- b:處於不間斷睡眠狀態的程序數。它們不是休眠,而是執行阻塞系統呼叫。他們不能被打斷,直到他們完成當前的操作。通常,這個過程是一個裝置驅動程式等待一些資源空閒。當程序恢復其正常活動時,將處理該程序的任何排隊中斷。
- Memory:
- swpd:使用的虛擬記憶體量,即已交換的記憶體量。
- 空閒:空閒(未使用)記憶體的數量。
- 緩衝區:用作緩衝區的記憶體量。
- 快取:用作快取的記憶體量。
- Swap:
- si:從交換空間交換的虛擬記憶體量。
- 所以:為了交換空間而交換的虛擬記憶體量。
- IO:
- bi:街區。用於將虛擬記憶體交換回RAM的資料塊數。
- 博:街區外。用於將虛擬記憶體從RAM交換到交換空間的資料塊數。
- System:
- in:每秒中斷的次數,包括時鐘。
- cs:每秒上下文切換的數目。上下文切換是指核心從系統模式切換到使用者模式處理。
- CPU: These values are all percentages of the total CPU time:
- us:執行使用者(非核心)程式碼所花費的時間。
- sy:執行核心程式碼的時間。
- id:空閒時間。
- wa:等待輸入或輸出所花費的時間。
- st:虛擬機器必須等待hypervisor完成對其他虛擬機器的服務,然後才能返回並處理此虛擬機器的時間。
相關:如何在Linux上使用vmstat命令
最高指揮部
top命令顯示一個包含資訊的螢幕。這些值每隔幾秒鐘更新一次。
要使用它,請鍵入以下內容:
top
按下了“e”鍵。這將顯示更改為兆位元組,這比表示位元組的長字串更容易直觀地解析。在螢幕的頂部有五行資訊,下面有一個包含資料列的窗格。
以下是您可以在每行中找到的資訊:
- 第一行:時間,計算機運行了多長時間,有多少人登入,以及過去1分鐘、5分鐘和15分鐘的平均負載。
- 第二行:任務的數量及其狀態:正在執行、已停止、正在睡眠或殭屍。
- 第三行:CPU資訊(參見下面欄位的分解)。
- 第四行:實體記憶體總量,以及空閒、使用、緩衝或快取的記憶體量。
- 第五行:交換記憶體的總量,以及空閒、已用和可用的記憶體量(考慮到預期可以從快取中恢復的記憶體)。
第三行的CPU欄位如下:
- us:CPU在使用者空間中為使用者執行程序所花費的時間。
- sy:CPU執行系統“核心空間”程序的時間。
- ni:CPU執行一個手動設定的好值的程序所花費的時間。
- id:CPU空閒時間。
- wa:CPU等待I/O完成的時間。
- 嗨:CPU處理硬體中斷的時間。
- si:CPU用來維護軟體中斷的時間。
- st(steal time):由於執行虛擬機器而導致CPU丟失的時間。
可能需要按向左或向右箭頭鍵才能看到所有列。每列中的值描述如下:
- PID:程序ID。
- USER:程序所有者的名稱。
- PR:程序優先順序。
- 倪:這個過程很有價值。
- VIRT:程序使用的虛擬記憶體。
- RES:程序使用的駐留記憶體。
- SHR:程序使用的共享記憶體。
- S:程序的狀態。(請參閱下面此欄位可以獲取的值列表)。
- %CPU:自上次更新以來程序所用的CPU時間份額。
- %MEM:使用的實體記憶體的份額。
- TIME+:任務在100分之一秒內使用的CPU總時間。
- 命令:命令名或命令列(名稱+選項)。(此列在上圖右側的螢幕外。)
S列中顯示的狀態可以是以下狀態之一:
- D:不間斷睡眠。
- R:跑步。
- S:睡覺。
- T:跟蹤(停止)。
- Z:殭屍。
按Q退出top。
正在讀取/proc/meminfo
Linux中報告記憶體統計資訊的許多(很可能是大多數)工具都從偽檔案系統/proc/meminfo中檢索資訊。我們可以使用cat或less命令來做同樣的事情。
我們鍵入以下內容:
less /proc/meminfo
根據執行的核心和CPU的體系結構,您可能會看到不同的欄位。我們在虛擬機器上得到以下結果:
MemTotal: 2035260 kB MemFree: 919064 kB MemAvailable: 1300932 kB Buffers: 33528 kB Cached: 457604 kB SwapCached: 29732 kB Active: 313360 kB Inactive: 603276 kB Active(anon): 74648 kB Inactive(anon): 355004 kB Active(file): 238712 kB Inactive(file): 248272 kB Unevictable: 16 kB Mlocked: 16 kB SwapTotal: 1557568 kB SwapFree: 873024 kB Dirty: 80 kB Writeback: 0 kB AnonPages: 414100 kB Mapped: 97436 kB Shmem: 4148 kB KReclaimable: 52932 kB Slab: 94216 kB SReclaimable: 52932 kB SUnreclaim: 41284 kB KernelStack: 9280 kB PageTables: 45264 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 2575196 kB Committed_AS: 5072192 kB VmallocTotal: 34359738367 kB VmallocUsed: 35712 kB VmallocChunk: 0 kB Percpu: 720 kB HardwareCorrupted: 0 kB AnonHugePages: 0 kB ShmemHugePages: 0 kB ShmemPmdMapped: 0 kB CmaTotal: 0 kB CmaFree: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB Hugetlb: 0 kB DirectMap4k: 180160 kB DirectMap2M: 1916928 kB
除非另有說明,所有大小均以千位元組為單位。以下是它們的含義,以及根據計算機的配置和硬體,您可能會看到的其他一些含義:
- MemTotal:總的可用RAM(除了一些保留位和核心二進位制程式碼)。
- MemFree:LowFree+HighFree之和。當前可用的RAM數量。
- MemAvailable:估計可用於啟動新應用程式的記憶體,無需交換。
- 緩衝區:原始磁碟塊的臨時儲存器。這減少了硬碟驅動器的輸入和輸出。它還加快了對相同資料的後續請求的訪問,因為這些資料已經存在於記憶體中。
- 快取:從硬碟上的檔案讀取的快取頁(不包括SwapCached)。
- SwapCached:在交換空間中保留一個副本的記憶體。
- 活動:最近使用的記憶體。除非絕對必要,否則不會回收。
- 非活動:已使用但不是最近使用的記憶體。很可能是填海造地的候選地。
- 活動(anon):分配給tmpfs偽檔案系統中建立的檔案的記憶體。匿名檔案不在硬碟上。
- 非活動(anon):候選逐出(記憶體回收)的匿名、tmpfs和shmem記憶體量。
- 活動(檔案):正在使用的或自上一個記憶體回收週期以來已使用的檔案快取記憶體量。
- 非活動(檔案):從候選回收的硬碟驅動器讀取的檔案快取記憶體量。
- 不可收回的:應該可以收回的記憶體量,但不是因為它被使用者空間程序鎖定在記憶體中。
- Mlocked:由於被使用者空間程序鎖定而無法收回的記憶體總量。
- HighTotal:HighMem的總量,由使用者空間程式和頁快取使用。核心可以訪問這個記憶體區域,但是它的訪問速度比LowMem慢。
- HighFree:可用HighMem的數量。
- lowtottal:LowMem的數量,它與HighMem有相同的用途,但核心也有自己的用途。
- LowFree:自由LowMem的量。
- MmapCopy:對映到檔案資料的記憶體量。
- SwapTotal:可用交換空間的總量。
- SwapFree:當前未使用的交換空間量。
- 髒:等待寫回磁碟的記憶體量。
- 寫回:主動寫回磁碟的記憶體。
- AnonPages:對映到使用者空間頁表的非檔案備份頁。
- 對映:對映到記憶體的檔案(如庫)。
- Shmem:tmpfs偽檔案系統中消耗的記憶體量。
- KReclaimable:如果對記憶體的需求足夠嚴重,核心將嘗試回收核心記憶體分配。
- Slab:核心資料結構快取。
- 可回收的:可回收的板記憶體量,如快取。
- sunclaime:無法回收的板記憶體量。
- KernelStack:分配給核心堆疊的記憶體量。
- 頁表:專用於最低級別頁表的記憶體量。
- 快速列表:因為頁面表的分配和刪除是一個非常頻繁的操作,所以儘可能快的分配和刪除頁面表是至關重要的。因此,用於頁表的頁被快取在許多不同的列表中,這些列表稱為“快速列表”
- NFS不穩定:伺服器已接收到網路檔案系統(NFS)頁,但尚未寫入非易失性儲存。
- 反彈:用於塊裝置反彈緩衝區的記憶體。反彈緩衝區位於記憶體中足夠低的位置,以便裝置直接訪問它。然後將資料複製到HighMem中所需的使用者頁。
- WritebackTmp:檔案系統在使用者空間(FUSE)中用於臨時寫回緩衝區的記憶體。
- CommitLimit:系統中當前可分配的記憶體總量。
- 提交的\AS:為滿足當前所有需求而估計的記憶體量。如果一個程式請求一些RAM,則會記錄該請求,但只有在程式開始使用RAM時,才會分配該RAM。它也只根據需要分配,直到程式保留的最大數量。可以“分配”的記憶體比實際交付的記憶體多。如果所有程式都試圖立即兌現RAM晶片,記憶體賭場可能會破產(而且必須與交換空間融資方攜手合作)。
- VmallocTotal:vmalloc記憶體區的總大小。
- VmallocUsed:使用的vmalloc區域的數量。由於Linux 4.4,這個欄位不再計算,而是硬編碼的。
- VmallocChunk:自由vmalloc區域的最大連續塊。
- HardwareCorrupted:標記為存在實體記憶體損壞問題的記憶體量。它不會被分配。
- LazyFree:處於MADV\u FREE狀態的記憶體量。當應用程式在一系列頁上設定MADV\u FREE標誌時,這表示它不再需要它們,它們現在是回收候選。實際的回收可能會延遲,直到有足夠的記憶體需求。如果應用程式開始寫入頁面,則可以取消回收。
- anonhuggepages:對映到使用者空間頁表的非檔案備份的巨大頁。非檔案備份頁不是來自硬碟檔案。
- ShmemHugePages:共享記憶體(shmem)和偽檔案系統(tmpfs)使用的記憶體量。
- ShmemPmdMapped: Amount of shared memory mapped into user-space with huge pages.
- CmaTotal: Amount of CMA (Contiguous Memory Allocator) pages. These are used by devices that can only communicate to contiguous regi*** of memory.
- CmaFree: Amount of free CMA (Contiguous Memory Allocator) pages.
- HugePages_Total: Huge page pool size.
- HugePages_Free: Number of unallocated huge pages in the pool.
- HugePages_Rsvd: Number of reserved huge pages. The commitment to allocate has been made, but allocation hasn’t occurred yet.
- HugePages_Surp: Number of huge pages in the pool above the defined system value.
- Hugepagesize: Size of huge pages.
- DirectMap4k: Number of bytes of RAM mapped to 4 kB pages.
- DirectMap4M: Number of bytes of RAM mapped to 4 MB pages.
- DirectMap2M: Number of bytes of RAM mapped to 2 MB pages.
- DirectMap1G: Number of bytes of RAM mapped to 2 GB pages.
與Linux一樣,快速概述的方法不止一種,而且總是至少有一種方法可以更深入地瞭解細節。
您可能會定期使用free、top和vmstate,並保留/proc/meminfo,以便在需要深入調查特定問題時使用。