檢查 Linux 中記憶體使用情況的 8 條命令

Magesh Maruthamuthu發表於2020-02-09

Linux 並不像 Windows,你經常不會有圖形介面可供使用,特別是在伺服器環境中。

作為一名 Linux 管理員,知道如何獲取當前可用的和已經使用的資源情況,比如記憶體、CPU、磁碟等,是相當重要的。如果某一應用在你的系統上佔用了太多的資源,導致你的系統無法達到最優狀態,那麼你需要找到並修正它。

如果你想找到消耗記憶體前十名的程式,你需要去閱讀這篇文章:如何在 Linux 中找出記憶體消耗最大的程式

在 Linux 中,命令能做任何事,所以使用相關命令吧。在這篇教程中,我們將會給你展示 8 個有用的命令來即檢視在 Linux 系統中記憶體的使用情況,包括 RAM 和交換分割槽。

建立交換分割槽在 Linux 系統中是非常重要的,如果你想了解如何建立,可以去閱讀這篇文章:在 Linux 系統上建立交換分割槽

下面的命令可以幫助你以不同的方式檢視 Linux 記憶體使用情況。

  • free 命令
  • /proc/meminfo 檔案
  • vmstat 命令
  • ps_mem 命令
  • smem 命令
  • top 命令
  • htop 命令
  • glances 命令

1)如何使用 free 命令檢視 Linux 記憶體使用情況

free 命令 是被 Linux 管理員廣泛使用的主要命令。但是它提供的資訊比 /proc/meminfo 檔案少。

free 命令會分別展示實體記憶體和交換分割槽記憶體中已使用的和未使用的數量,以及核心使用的緩衝區和快取。

這些資訊都是從 /proc/meminfo 檔案中獲取的。

# free -m
              total        used        free      shared  buff/cache   available
Mem:          15867        9199        1702        3315        4965        3039
Swap:         17454         666       16788
  • total:總的記憶體量
  • used:被當前執行中的程式使用的記憶體量(used = totalfreebuff/cache
  • free: 未被使用的記憶體量(free = totalusedbuff/cache
  • shared: 在兩個或多個程式之間共享的記憶體量
  • buffers: 記憶體中保留用於核心記錄程式佇列請求的記憶體量
  • cache: 在 RAM 中儲存最近使用過的檔案的頁緩衝大小
  • buff/cache: 緩衝區和快取總的使用記憶體量
  • available: 可用於啟動新應用的可用記憶體量(不含交換分割槽)

2) 如何使用 /proc/meminfo 檔案檢視 Linux 記憶體使用情況

/proc/meminfo 檔案是一個包含了多種記憶體使用的實時資訊的虛擬檔案。它展示記憶體狀態單位使用的是 kB,其中大部分屬性都難以理解。然而它也包含了記憶體使用情況的有用資訊。

# cat /proc/meminfo

MemTotal:       16248572 kB
MemFree:         1764576 kB
MemAvailable:    3136604 kB
Buffers:          234132 kB
Cached:          4731288 kB
SwapCached:        28516 kB
Active:          9004412 kB
Inactive:        3552416 kB
Active(anon):    8094128 kB
Inactive(anon):  2896064 kB
Active(file):     910284 kB
Inactive(file):   656352 kB
Unevictable:          80 kB
Mlocked:              80 kB
SwapTotal:      17873388 kB
SwapFree:       17191328 kB
Dirty:               252 kB
Writeback:             0 kB
AnonPages:       7566736 kB
Mapped:          3692368 kB
Shmem:           3398784 kB
Slab:             278976 kB
SReclaimable:     125480 kB
SUnreclaim:       153496 kB
KernelStack:       23936 kB
PageTables:        73880 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    25997672 kB
Committed_AS:   24816804 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
Percpu:             3392 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:     1059088 kB
DirectMap2M:    14493696 kB
DirectMap1G:     2097152 kB

3) 如何使用 vmstat 命令檢視 Linux 記憶體使用情況

vmstat 命令 是另一個報告虛擬記憶體統計資訊的有用工具。

vmstat 報告的資訊包括:程式、記憶體、頁面對映、塊 I/O、陷阱、磁碟和 CPU 特性資訊。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
 1  0 682060 1769324 234188 4853500  0    3    25    91   31   16 34 13 52  0  0

如果你想詳細瞭解每一項的含義,閱讀下面的描述。

  • procs:程式
    • r: 可以執行的程式數目(正在執行或等待執行)
    • b: 處於不可中斷睡眠中的程式數目
  • memory:記憶體
    • swpd: 使用的虛擬記憶體數量
    • free: 空閒的記憶體數量
    • buff: 用作緩衝區記憶體的數量
    • cache: 用作快取記憶體的數量
    • inact: 不活動的記憶體數量(使用 -a 選項)
    • active: 活動的記憶體數量(使用 -a 選項)
  • Swap:交換分割槽
    • si: 每秒從磁碟交換的記憶體數量
    • so: 每秒交換到磁碟的記憶體數量
  • IO:輸入輸出
    • bi: 從一個塊裝置中收到的塊(塊/秒)
    • bo: 傳送到一個塊裝置的塊(塊/秒)
  • System:系統
    • in: 每秒的中斷次數,包括時鐘。
    • cs: 每秒的上下文切換次數。
  • CPU:下面這些是在總的 CPU 時間佔的百分比
    • us: 花費在非核心程式碼上的時間佔比(包括使用者時間,排程時間)
    • sy: 花費在核心程式碼上的時間佔比 (系統時間)
    • id: 花費在閒置的時間佔比。在 Linux 2.5.41 之前,包括 I/O 等待時間
    • wa: 花費在 I/O 等待上的時間佔比。在 Linux 2.5.41 之前,包括在空閒時間中
    • st: 被虛擬機器偷走的時間佔比。在 Linux 2.6.11 之前,這部分稱為 unknown

執行下面的命令檢視詳細的資訊。

# vmstat -s

        16248580 K total memory
         2210256 K used memory
         2311820 K active memory
         2153352 K inactive memory
        11368812 K free memory
          107584 K buffer memory
         2561928 K swap cache
        17873388 K total swap
               0 K used swap
        17873388 K free swap
           44309 non-nice user cpu ticks
             164 nice user cpu ticks
           14332 system cpu ticks
          382418 idle cpu ticks
            1248 IO-wait cpu ticks
            1407 IRQ cpu ticks
            2147 softirq cpu ticks
               0 stolen cpu ticks
         1022437 pages paged in
          260296 pages paged out
               0 pages swapped in
               0 pages swapped out
         1424838 interrupts
         4979524 CPU context switches
      1577163147 boot time
            3318 forks

4) 如何使用 ps_mem 命令檢視 Linux 記憶體使用情況

ps_mem 是一個用來檢視當前記憶體使用情況的簡單的 Python 指令碼。該工具可以確定每個程式使用了多少記憶體(不是每個程式)。

該工具採用如下的方法計算每個程式使用記憶體:總的使用 = 程式程式私有的記憶體 + 程式程式共享的記憶體。

計算共享記憶體是存在不足之處的,該工具可以為執行中的核心自動選擇最準確的方法。

# ps_mem

 Private  +   Shared  =  RAM used    Program
180.0 KiB +  30.0 KiB = 210.0 KiB    xf86-video-intel-backlight-helper (2)
192.0 KiB +  66.0 KiB = 258.0 KiB    cat (2)
312.0 KiB +  38.5 KiB = 350.5 KiB    lvmetad
380.0 KiB +  25.5 KiB = 405.5 KiB    crond
392.0 KiB +  32.5 KiB = 424.5 KiB    rtkit-daemon
852.0 KiB + 117.0 KiB = 969.0 KiB    gnome-session-ctl (2)
928.0 KiB +  56.5 KiB = 984.5 KiB    gvfs-mtp-volume-monitor
  1.0 MiB +  42.5 KiB =   1.0 MiB    dconf-service
  1.0 MiB + 106.5 KiB =   1.1 MiB    gvfs-goa-volume-monitor
  1.0 MiB + 180.5 KiB =   1.2 MiB    gvfsd
.
.
  5.3 MiB +   3.0 MiB =   8.3 MiB    evolution-addressbook-factory
  8.5 MiB +   1.2 MiB =   9.7 MiB    gnome-session-binary (4)
  7.5 MiB +   3.1 MiB =  10.5 MiB    polkitd
  7.4 MiB +   3.3 MiB =  10.7 MiB    pulseaudio (2)
  7.0 MiB +   7.0 MiB =  14.0 MiB    msm_notifier
 12.7 MiB +   2.3 MiB =  15.0 MiB    evolution-source-registry
 13.3 MiB +   2.5 MiB =  15.8 MiB    gnome-terminal-server
 15.8 MiB +   1.0 MiB =  16.8 MiB    tracker-miner-fs
 18.7 MiB +   1.8 MiB =  20.5 MiB    python3.7
 16.6 MiB +   4.0 MiB =  20.5 MiB    evolution-calendar-factory
 22.3 MiB + 753.0 KiB =  23.0 MiB    gsd-keyboard (2)
 22.4 MiB + 832.0 KiB =  23.2 MiB    gsd-wacom (2)
 20.8 MiB +   2.5 MiB =  23.3 MiB    blueman-tray
 22.0 MiB +   1.8 MiB =  23.8 MiB    blueman-applet
 23.1 MiB + 934.0 KiB =  24.0 MiB    gsd-xsettings (2)
 23.7 MiB +   1.2 MiB =  24.9 MiB    gsd-media-keys (2)
 23.4 MiB +   1.6 MiB =  25.0 MiB    gsd-color (2)
 23.9 MiB +   1.2 MiB =  25.1 MiB    gsd-power (2)
 16.5 MiB +   8.9 MiB =  25.4 MiB    evolution-alarm-notify
 27.2 MiB +   2.0 MiB =  29.2 MiB    systemd-journald
 28.7 MiB +   2.8 MiB =  31.5 MiB    c
 29.6 MiB +   2.2 MiB =  31.8 MiB    chrome-gnome-sh (2)
 43.9 MiB +   6.8 MiB =  50.7 MiB    WebExtensions
 46.7 MiB +   6.7 MiB =  53.5 MiB    goa-daemon
 86.5 MiB +  55.2 MiB = 141.7 MiB    Xorg (2)
191.4 MiB +  24.1 MiB = 215.4 MiB    notepadqq-bin
306.7 MiB +  29.0 MiB = 335.7 MiB    gnome-shell (2)
601.6 MiB +  77.7 MiB = 679.2 MiB    firefox
  1.0 GiB + 109.7 MiB =   1.1 GiB    chrome (15)
  2.3 GiB + 123.1 MiB =   2.5 GiB    Web Content (8)
----------------------------------
                           5.6 GiB
==================================

5)如何使用 smem 命令檢視 Linux 記憶體使用情況

smem 是一個可以為 Linux 系統提供多種記憶體使用情況報告的工具。不同於現有的工具,smem 可以報告比例集大小Proportional Set Size(PSS)、唯一集大小Unique Set Size(USS)和駐留集大小Resident Set Size(RSS)。

  • 比例集大小(PSS):庫和應用在虛擬記憶體系統中的使用量。
  • 唯一集大小(USS):其報告的是非共享記憶體。
  • 駐留集大小(RSS):實體記憶體(通常多程式共享)使用情況,其通常高於記憶體使用量。
# smem -tk

 PID User     Command                         Swap      USS      PSS      RSS
3383 daygeek  cat                                0    92.0K   123.0K     1.7M
3384 daygeek  cat                                0   100.0K   129.0K     1.7M
1177 daygeek  /usr/lib/gnome-session-ctl         0   436.0K   476.0K     4.6M
1171 daygeek  /usr/bin/dbus-daemon --conf        0   524.0K   629.0K     3.8M
1238 daygeek  /usr/lib/xdg-permission-sto        0   592.0K   681.0K     5.9M
1350 daygeek  /usr/lib/gsd-screensaver-pr        0   652.0K   701.0K     5.8M
1135 daygeek  /usr/lib/gdm-x-session --ru        0   648.0K   723.0K     6.0M
.
.
1391 daygeek  /usr/lib/evolution-data-ser        0    16.5M    25.2M    63.3M
1416 daygeek  caffeine-ng                        0    28.7M    31.4M    66.2M
4855 daygeek  /opt/google/chrome/chrome -        0    38.3M    46.3M   120.6M
2174 daygeek  /usr/lib/firefox/firefox -c        0    44.0M    50.7M   120.3M
1254 daygeek  /usr/lib/goa-daemon                0    46.7M    53.3M    80.4M
3416 daygeek  /opt/google/chrome/chrome -        0    44.7M    54.2M   103.3M
4782 daygeek  /opt/google/chrome/chrome -        0    57.2M    65.8M   142.3M
1137 daygeek  /usr/lib/Xorg vt2 -displayf        0    77.2M   129.6M   192.3M
3376 daygeek  /opt/google/chrome/chrome          0   117.8M   131.0M   210.9M
4448 daygeek  /usr/lib/firefox/firefox -c        0   124.4M   133.8M   224.1M
3558 daygeek  /opt/google/chrome/chrome -        0   157.3M   165.7M   242.2M
2310 daygeek  /usr/lib/firefox/firefox -c        0   159.6M   169.4M   259.6M
4331 daygeek  /usr/lib/firefox/firefox -c        0   176.8M   186.2M   276.8M
4034 daygeek  /opt/google/chrome/chrome -        0   179.3M   187.9M   264.6M
3911 daygeek  /opt/google/chrome/chrome -        0   183.1M   191.8M   269.4M
3861 daygeek  /opt/google/chrome/chrome -        0   199.8M   208.2M   285.2M
2746 daygeek  /usr/bin/../lib/notepadqq/n        0   193.5M   217.5M   261.5M
1194 daygeek  /usr/bin/gnome-shell               0   203.7M   219.0M   285.1M
2945 daygeek  /usr/lib/firefox/firefox -c        0   294.5M   308.0M   410.2M
2786 daygeek  /usr/lib/firefox/firefox -c        0   341.2M   354.3M   459.1M
4193 daygeek  /usr/lib/firefox/firefox -c        0   417.4M   427.6M   519.3M
2651 daygeek  /usr/lib/firefox/firefox -c        0   417.0M   430.1M   535.6M
2114 daygeek  /usr/lib/firefox/firefox -c        0   430.6M   473.9M   610.9M
2039 daygeek  /usr/lib/firefox/firefox --        0   601.3M   677.5M   840.6M
-------------------------------------------------------------------------------
  90 1                                           0     4.8G     5.2G     8.0G

6) 如何使用 top 命令檢視 Linux 記憶體使用情況

top 命令 是一個 Linux 系統的管理員最常使用的用於檢視程式的資源使用情況的命令。

該命令會展示了系統總的記憶體量、當前記憶體使用量、空閒記憶體量和緩衝區使用的記憶體總量。此外,該命令還會展示總的交換空間記憶體量、當前交換空間的記憶體使用量、空閒的交換空間記憶體量和快取使用的記憶體總量。

# top -b | head -10

top - 11:04:39 up 40 min,  1 user,  load average: 1.59, 1.42, 1.28
Tasks: 288 total,   2 running, 286 sleeping,   0 stopped,   0 zombie
%Cpu(s): 13.3 us,  1.5 sy,  0.0 ni, 84.4 id,  0.0 wa,  0.3 hi,  0.5 si,  0.0 st
KiB Mem : 16248572 total,  7755928 free,  4657736 used,  3834908 buff/cache
KiB Swap: 17873388 total, 17873388 free,        0 used.  9179772 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 2114 daygeek   20     3182736 616624 328228 R  83.3   3.8   7:09.72 Web Content
 2039 daygeek   20     4437952 849616 261364 S  13.3   5.2   7:58.54 firefox
 1194 daygeek   20     4046856 291288 165460 S   4.2   1.8   1:57.68 gnome-shell
 4034 daygeek   20      808556 273244  88676 S   4.2   1.7   1:44.72 chrome
 2945 daygeek   20     3309832 416572 150112 S   3.3   2.6   4:04.60 Web Content
 1137 daygeek   20      564316 197292 183380 S   2.5   1.2   2:55.76 Xorg
 2651 daygeek   20     3098420 547260 275700 S   1.7   3.4   2:15.96 Web Content
 2786 daygeek   20     2957112 463912 240744 S   1.7   2.9   3:22.29 Web Content
    1 root      20      182756  10208   7760 S   0.8   0.1   0:04.51 systemd
  442 root     -51                           S   0.8         0:05.02 irq/141-iw+
 1426 daygeek   20      373660  48948  29820 S   0.8   0.3   0:03.55 python3
 2174 daygeek   20     2466680 122196  78604 S   0.8   0.8   0:17.75 WebExtensi+

7) 如何使用 htop 命令檢視 Linux 記憶體使用情況

htop 命令 是一個可互動的 Linux/Unix 系統程式檢視器。它是一個文字模式應用,且使用它需要 Hisham 開發的 ncurses 庫。

該名令的設計目的使用來代替 top 命令。該命令與 top 命令很相似,但是其允許你可以垂直地或者水平地的滾動以便可以檢視系統中所有的程式情況。

htop 命令擁有不同的顏色,這個額外的優點當你在追蹤系統效能情況時十分有用。

此外,你可以自由地執行與程式相關的任務,比如殺死程式或者改變程式的優先順序而不需要其程式號(PID)。

8)如何使用 glances 命令檢視 Linux 記憶體使用情況

Glances 是一個 Python 編寫的跨平臺的系統監視工具。

你可以在一個地方檢視所有資訊,比如:CPU 使用情況、記憶體使用情況、正在執行的程式、網路介面、磁碟 I/O、RAID、感測器、檔案系統資訊、Docker、系統資訊、執行時間等等。


via: https://www.2daygeek.com/linux-commands-check-memory-usage/

作者:Magesh Maruthamuthu 選題:lujun9972 譯者:萌新阿巖 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

檢查 Linux 中記憶體使用情況的 8 條命令

訂閱“Linux 中國”官方小程式來檢視

相關文章