介紹如何在 Linux 系統中查詢目前記憶體的用量,以及各應用程式所占用的記憶體量。
Linux 系統若要穩定正常運作,記憶體用量是其中一項關鍵,對於 Linux 系統管理者來說,隨時掌握系統記憶體的使用狀況是相當重要的,以下介紹各種查詢 Linux 系統記憶體用量的方法。
free
指令
Linux 的 free
指令可以用來查詢目前系統上的記憶體用量資訊:
# 查詢記憶體用量資訊
free
total used free shared buff/cache available Mem: 16398420 413328 12280628 19676 3704464 15627336 Swap: 0 0 0
以比較容易閱讀的格式輸出:
# 以易讀格式輸出 free -h
total used free shared buff/cache available Mem: 15G 403M 11G 19M 3.5G 14G Swap: 0B 0B 0B
如果需要持續觀察系統記憶體用量的變化,可以搭配 -s
與 -c
參數,分別指定輸出間隔秒數與輸出次數:
# 每隔 5 秒輸出一次,總共輸出 10 次 free -s 5 -c 10
除此之外,亦可搭配 watch
指令來持續觀測記憶體用量:
# 持續觀測記憶體用量
watch free
/proc/meminfo
檔案
Linux 系統的 /proc/meminfo
檔案中記錄了記憶體的相關資訊,一般使用者都可以直接查看其內容:
# 輸出 /proc/meminfo 內容
cat /proc/meminfo
MemTotal: 16398420 kB MemFree: 12285240 kB MemAvailable: 15631640 kB Buffers: 560884 kB Cached: 2705044 kB SwapCached: 0 kB Active: 1583716 kB Inactive: 1966768 kB Active(anon): 290800 kB Inactive(anon): 13420 kB Active(file): 1292916 kB Inactive(file): 1953348 kB Unevictable: 1552 kB Mlocked: 0 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 0 kB Writeback: 0 kB AnonPages: 286104 kB Mapped: 234564 kB Shmem: 19668 kB KReclaimable: 438220 kB Slab: 506812 kB SReclaimable: 438220 kB SUnreclaim: 68592 kB KernelStack: 4688 kB PageTables: 21852 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 8199208 kB Committed_AS: 2174496 kB VmallocTotal: 34359738367 kB VmallocUsed: 12892 kB VmallocChunk: 0 kB Percpu: 1712 kB HardwareCorrupted: 0 kB AnonHugePages: 0 kB ShmemHugePages: 0 kB ShmemPmdMapped: 0 kB FileHugePages: 0 kB FilePmdMapped: 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: 221032 kB DirectMap2M: 7118848 kB DirectMap1G: 11534336 kB
在 /proc/meminfo
檔案中包含了非常詳細的記憶體資訊,而比較重要的欄位與解釋如下:
欄位 | 解釋 |
---|---|
MemTotal |
實體記憶體(RAM)總量大小。 |
MemFree |
可用的記憶體(RAM)大小,等同於 LowFree 與 HighFree 的總和。 |
MemAvailable |
對於新啟動的應用程式,可用記憶體大小估計值。 |
Buffers |
緩衝區大小。 |
Cached |
快取記憶體大小。 |
HighTotal |
user-space 的記憶體(RAM)總量大小。 |
HighFree |
user-space 可用的記憶體(RAM)大小。 |
LowTotal |
kernel-space 的記憶體(RAM)總量大小。 |
LowFree |
kernel-space 可用的記憶體(RAM)大小。 |
SwapTotal |
交換記憶體(swap)總量大小。 |
SwapFree |
可用的交換記憶體(swap)大小。 |
Dirty |
等待將資料寫入硬碟的記憶體大小。 |
Writeback |
正在將資料寫入硬碟的記憶體大小。 |
如果只想看幾個比較重要的記憶體資訊,可以利用 grep
來篩選需要的欄位:
# 篩選重要記憶體資訊 grep -E 'Mem|Cache|Swap|Dirty' /proc/meminfo
MemTotal: 16398420 kB MemFree: 12280912 kB MemAvailable: 15627600 kB Cached: 2705244 kB SwapCached: 0 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 28 kB
smem
指令
smem
也是一個好用的記憶體用量查詢工具,若在 Ubuntu Linux 中可以使用 apt
安裝:
# 安裝 smem 套件
sudo apt install smem
執行 smem
即可顯示每個程式的記憶體用量資訊:
# 查詢各程式的記憶體用量資訊
smem
PID User Command Swap USS PSS RSS 13715 ubuntu /lib/systemd/systemd --user 0 1128 1921 7772 13808 ubuntu -bash 0 1816 2399 5332 14055 ubuntu -bash 0 1868 2450 5348 14620 ubuntu /usr/bin/python /usr/bin/sm 0 7752 7801 10092
若要以 smem
指令查詢全系統的記憶體用量資訊,可以加上 -w
參數:
# 輸出全系統的記憶體用量資訊 smem -w
Area Used Cache Noncache firmware/hardware 0 0 0 kernel image 0 0 0 kernel dynamic memory 3618192 3495048 123144 userspace memory 530664 236628 294036 free memory 12249564 12249564 0
top
與 htop
指令
top
指令也可以用來觀察系統的記憶體用量。
# 以 top 監看系統狀態
top
htop
的功能跟 top
相同,只是輸出的排版與顏色上的差異:
# 以 htop 監看系統狀態
htop