Linux

Linux 檢查記憶體用量指令教學與範例

介紹如何在 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)大小,等同於 LowFreeHighFree 的總和。
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

tophtop 指令

top 指令也可以用來觀察系統的記憶體用量。

# 以 top 監看系統狀態
top
以 top 監看系統狀態

htop 的功能跟 top 相同,只是輸出的排版與顏色上的差異:

# 以 htop 監看系統狀態
htop
以 htop 監看系統狀態

參考資料

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago