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:1586791991702331549653039
Swap:1745466616788
total:总的内存量
used:被当前运行中的进程使用的内存量(used = total – free – buff/cache)
free: 未被使用的内存量(free = total – used – buff/cache)
shared: 在两个或多个进程之间共享的内存量
buffers: 内存中保留用于内核记录进程队列请求的内存量
cache: 在 RAM 中存储最近使用过的文件的页缓冲大小
buff/cache: 缓冲区和缓存总的使用内存量
available: 可用于启动新应用的可用内存量(不含交换分区)
2) 如何使用 /proc/meminfo 文件查看 Linux 内存使用情况
/proc/meminfo 文件是一个包含了多种内存使用的实时信息的虚拟文件。它展示内存状态单位使用的是 kB,其中大部分属性都难以理解。然而它也包含了内存使用情况的有用信息。
#cat/proc/meminfo
MemTotal:16248572kB
MemFree:1764576kB
MemAvailable:3136604kB
Buffers:234132kB
Cached:4731288kB
SwapCached:28516kB
Active:9004412kB
Inactive:3552416kB
Active(anon):8094128kB
Inactive(anon):2896064kB
Active(file):910284kB
Inactive(file):656352kB
Unevictable:80kB
Mlocked:80kB
SwapTotal:17873388kB
SwapFree:17191328kB
Dirty:252kB
Writeback:0kB
AnonPages:7566736kB
Mapped:3692368kB
Shmem:3398784kB
Slab:278976kB
SReclaimable:125480kB
SUnreclaim:153496kB
KernelStack:23936kB
PageTables:73880kB
NFS_Unstable:0kB
Bounce:0kB
WritebackTmp:0kB
CommitLimit:25997672kB
Committed_AS:24816804kB
VmallocTotal:34359738367kB
VmallocUsed:0kB
VmallocChunk:0kB
Percpu:3392kB
HardwareCorrupted:0kB
AnonHugePages:0kB
ShmemHugePages:0kB
ShmemPmdMapped:0kB
HugePages_Total:0
HugePages_Free:0
HugePages_Rsvd:0
HugePages_Surp:0
Hugepagesize:2048kB
Hugetlb:0kB
DirectMap4k:1059088kB
DirectMap2M:14493696kB
DirectMap1G:2097152kB
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 boincs us syidwa st
1068206017693242341884853500032591311634135200
如果你想详细了解每一项的含义,阅读下面的描述。
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
16248580K total memory
2210256K used memory
2311820K active memory
2153352K inactive memory
11368812K free memory
107584K buffer memory
2561928K swap cache
17873388K total swap
0K used swap
17873388K free swap
44309non-niceuser cpu ticks
164niceuser cpu ticks
14332system cpu ticks
382418idle cpu ticks
1248IO-wait cpu ticks
1407IRQ cpu ticks
2147softirq cpu ticks
0stolen cpu ticks
1022437pages pagedin
260296pages paged out
0pages swappedin
0pages swapped out
1424838interrupts
4979524CPU context switches
1577163147boottime
3318forks
4) 如何使用 ps_mem 命令查看 Linux 内存使用情况
ps_mem 是一个用来查看当前内存使用情况的简单的 Python 脚本。该工具可以确定每个程序使用了多少内存(不是每个进程)。
该工具采用如下的方法计算每个程序使用内存:总的使用 = 程序进程私有的内存 + 程序进程共享的内存。
计算共享内存是存在不足之处的,该工具可以为运行中的内核自动选择最准确的方法。
#ps_mem
Private+Shared=RAM usedProgram
180.0KiB+30.0KiB=210.0KiBxf86-video-intel-backlight-helper(2)
192.0KiB+66.0KiB=258.0KiBcat(2)
312.0KiB+38.5KiB=350.5KiBlvmetad
380.0KiB+25.5KiB=405.5KiBcrond
392.0KiB+32.5KiB=424.5KiBrtkit-daemon
852.0KiB+117.0KiB=969.0KiBgnome-session-ctl(2)
928.0KiB+56.5KiB=984.5KiBgvfs-mtp-volume-monitor
1.0MiB+42.5KiB=1.0MiBdconf-service
1.0MiB+106.5KiB=1.1MiBgvfs-goa-volume-monitor
1.0MiB+180.5KiB=1.2MiBgvfsd
.
.
5.3MiB+3.0MiB=8.3MiBevolution-addressbook-factory
8.5MiB+1.2MiB=9.7MiBgnome-session-binary(4)
7.5MiB+3.1MiB=10.5MiBpolkitd
7.4MiB+3.3MiB=10.7MiBpulseaudio(2)
7.0MiB+7.0MiB=14.0MiBmsm_notifier
12.7MiB+2.3MiB=15.0MiBevolution-source-registry
13.3MiB+2.5MiB=15.8MiBgnome-terminal-server
15.8MiB+1.0MiB=16.8MiBtracker-miner-fs
18.7MiB+1.8MiB=20.5MiBpython3.7
16.6MiB+4.0MiB=20.5MiBevolution-calendar-factory
22.3MiB+753.0KiB=23.0MiBgsd-keyboard(2)
22.4MiB+832.0KiB=23.2MiBgsd-wacom(2)
20.8MiB+2.5MiB=23.3MiBblueman-tray
22.0MiB+1.8MiB=23.8MiBblueman-applet
23.1MiB+934.0KiB=24.0MiBgsd-xsettings(2)
23.7MiB+1.2MiB=24.9MiBgsd-media-keys(2)
23.4MiB+1.6MiB=25.0MiBgsd-color(2)
23.9MiB+1.2MiB=25.1MiBgsd-power(2)
16.5MiB+8.9MiB=25.4MiBevolution-alarm-notify
27.2MiB+2.0MiB=29.2MiBsystemd-journald
28.7MiB+2.8MiB=31.5MiBc
29.6MiB+2.2MiB=31.8MiBchrome-gnome-sh(2)
43.9MiB+6.8MiB=50.7MiBWebExtensions
46.7MiB+6.7MiB=53.5MiBgoa-daemon
86.5MiB+55.2MiB=141.7MiBXorg(2)
191.4MiB+24.1MiB=215.4MiBnotepadqq-bin
306.7MiB+29.0MiB=335.7MiBgnome-shell(2)
601.6MiB+77.7MiB=679.2MiBfirefox
1.0GiB+109.7MiB=1.1GiBchrome(15)
2.3GiB+123.1MiB=2.5GiBWebContent(8)
----------------------------------
5.6GiB
==================================
5)如何使用 smem 命令查看 Linux 内存使用情况
smem 是一个可以为 Linux 系统提供多种内存使用情况报告的工具。不同于现有的工具,smem 可以报告比例集大小Proportional Set Size(PSS)、唯一集大小Unique Set Size(USS)和驻留集大小Resident Set Size(RSS)。
比例集大小(PSS):库和应用在虚拟内存系统中的使用量。
唯一集大小(USS):其报告的是非共享内存。
驻留集大小(RSS):物理内存(通常多进程共享)使用情况,其通常高于内存使用量。
#smem-tk
PIDUserCommandSwapUSS PSS RSS
3383daygeekcat092.0K123.0K1.7M
3384daygeekcat0100.0K129.0K1.7M
1177daygeek/usr/lib/gnome-session-ctl0436.0K476.0K4.6M
1171daygeek/usr/bin/dbus-daemon--conf0524.0K629.0K3.8M
1238daygeek/usr/lib/xdg-permission-sto0592.0K681.0K5.9M
1350daygeek/usr/lib/gsd-screensaver-pr0652.0K701.0K5.8M
1135daygeek/usr/lib/gdm-x-session--ru0648.0K723.0K6.0M
.
.
1391daygeek/usr/lib/evolution-data-ser016.5M25.2M63.3M
1416daygeek caffeine-ng028.7M31.4M66.2M
4855daygeek/opt/google/chrome/chrome-038.3M46.3M120.6M
2174daygeek/usr/lib/firefox/firefox-c044.0M50.7M120.3M
1254daygeek/usr/lib/goa-daemon046.7M53.3M80.4M
3416daygeek/opt/google/chrome/chrome-044.7M54.2M103.3M
4782daygeek/opt/google/chrome/chrome-057.2M65.8M142.3M
1137daygeek/usr/lib/Xorgvt2-displayf077.2M129.6M192.3M
3376daygeek/opt/google/chrome/chrome0117.8M131.0M210.9M
4448daygeek/usr/lib/firefox/firefox-c0124.4M133.8M224.1M
3558daygeek/opt/google/chrome/chrome-0157.3M165.7M242.2M
2310daygeek/usr/lib/firefox/firefox-c0159.6M169.4M259.6M
4331daygeek/usr/lib/firefox/firefox-c0176.8M186.2M276.8M
4034daygeek/opt/google/chrome/chrome-0179.3M187.9M264.6M
3911daygeek/opt/google/chrome/chrome-0183.1M191.8M269.4M
3861daygeek/opt/google/chrome/chrome-0199.8M208.2M285.2M
2746daygeek/usr/bin/../lib/notepadqq/n0193.5M217.5M261.5M
1194daygeek/usr/bin/gnome-shell0203.7M219.0M285.1M
2945daygeek/usr/lib/firefox/firefox-c0294.5M308.0M410.2M
2786daygeek/usr/lib/firefox/firefox-c0341.2M354.3M459.1M
4193daygeek/usr/lib/firefox/firefox-c0417.4M427.6M519.3M
2651daygeek/usr/lib/firefox/firefox-c0417.0M430.1M535.6M
2114daygeek/usr/lib/firefox/firefox-c0430.6M473.9M610.9M
2039daygeek/usr/lib/firefox/firefox--0601.3M677.5M840.6M
-------------------------------------------------------------------------------
90104.8G5.2G8.0G
6) 如何使用 top 命令查看 Linux 内存使用情况
top 命令 是一个 Linux 系统的管理员最常使用的用于查看进程的资源使用情况的命令。
该命令会展示了系统总的内存量、当前内存使用量、空闲内存量和缓冲区使用的内存总量。此外,该命令还会展示总的交换空间内存量、当前交换空间的内存使用量、空闲的交换空间内存量和缓存使用的内存总量。
#top-b|head-10
top-11:04:39up40min,1user,load average:1.59,1.42,1.28
Tasks:288total,2running,286sleeping,0stopped,0zombie
%Cpu(s):13.3us,1.5sy,0.0ni,84.4id,0.0wa,0.3hi,0.5si,0.0st
KiBMem:16248572total,7755928free,4657736used,3834908buff/cache
KiBSwap:17873388total,17873388free,0used.9179772availMem
PID USER PR NI VIRT RES SHR S%CPU%MEM TIME+COMMAND
2114daygeek203182736616624328228R83.33.87:09.72WebContent
2039daygeek204437952849616261364S13.35.27:58.54firefox
1194daygeek204046856291288165460S4.21.81:57.68gnome-shell
4034daygeek2080855627324488676S4.21.71:44.72chrome
2945daygeek203309832416572150112S3.32.64:04.60WebContent
1137daygeek20564316197292183380S2.51.22:55.76Xorg
2651daygeek203098420547260275700S1.73.42:15.96WebContent
2786daygeek202957112463912240744S1.72.93:22.29WebContent
1root20182756102087760S0.80.10:04.51systemd
442root-51S0.80:05.02irq/141-iw+
1426daygeek203736604894829820S0.80.30:03.55python3
2174daygeek20246668012219678604S0.80.80:17.75WebExtensi+
7) 如何使用 htop 命令查看 Linux 内存使用情况
htop 命令 是一个可交互的 Linux/Unix 系统进程查看器。它是一个文本模式应用,且使用它需要 Hisham 开发的 ncurses 库。
该名令的设计目的使用来代替 top 命令。该命令与 top 命令很相似,但是其允许你可以垂直地或者水平地的滚动以便可以查看系统中所有的进程情况。
htop 命令拥有不同的颜色,这个额外的优点当你在追踪系统性能情况时十分有用。
此外,你可以自由地执行与进程相关的任务,比如杀死进程或者改变进程的优先级而不需要其进程号(PID)。
8)如何使用 glances 命令查看 Linux 内存使用情况
Glances 是一个 Python 编写的跨平台的系统监视工具。
你可以在一个地方查看所有信息,比如:CPU 使用情况、内存使用情况、正在运行的进程、网络接口、磁盘 I/O、RAID、传感器、文件系统信息、Docker、系统信息、运行时间等等。
【编辑推荐】
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0