检查 Linux 中内存使用情况的 8 条命令

MAGESH MARUTHAMUTHU 的头像

·

·

·

6,035 次阅读

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 - --io--
 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)

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

作者:[Magesh Maruthamuthu](https://www.2daygeek.com/author/magesh/) 选题:[lujun9972](https://github.com/lujun9972) 译者:[萌新阿岩](https://github.com/mengxinayan) 校对:[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注