在Linux系统中,大部分操作都通过命令行来完成,因为大部分情况下不开启图形界面。
在服务器环境,则只能通过shell执行操作。
下面介绍查看内存使用情况的相关命令。 包括物理内存(RAM)和交换内存(swap)。
我们经常需要检查服务器的内存使用情况,以及每个进程占用的内存,避免发生资源短缺进而影响用户体验。
对于网站和Web服务,必须具有足够的内存才能处理客户端请求。 如果内存不足,在请求高峰时就会变得缓慢,拥堵,甚至服务崩溃。
当然桌面系统也是同样的道理。
free 命令是Linux系统中最简单和最常用的内存查看命令, 示例如下:
zz@xiaole:~$ free -m
总计 已用 空闲 共享 缓冲/缓存 可用
内存: 15659 8709 165 1477 6785 5144
交换: 15624 1344 14280
(xonnx) zz@xiaole:~$ free -h
总计 已用 空闲 共享 缓冲/缓存 可用
内存: 15Gi 8.5Gi 197Mi 1.4Gi 6.6Gi 5.1Gi
交换: 15Gi 1.3Gi 13Gi
其中, -m 选项是以MB为单位来展示内存使用信息; -h 选项则是以人类(human)可读的单位来展示。
上面的示例中, Mem: 这一行:
total 表示总共有 7822MB 的物理内存(RAM),即7.6G。
used 表示物理内存的使用量,大约是 322M。
free 表示空闲内存;
shared 表示共享内存?;
buff/cache 表示缓存和缓冲内存量; Linux 系统会将很多东西缓存起来以提高性能,这部分内存可以在必要时进行释放,给其他程序使用。
available 表示可用内存;
输出结果很容易理解。 Swap 这一行表示交换内存,从示例中的数字可以看到,基本上没使用到交换内存。
另一种方法是读取 /proc/meminfo 文件。 我们知道, /proc 目录下都是虚拟文件,包含内核以及操作系统相关的动态信息。
zz@xiaole:~$ cat /proc/meminfo
MemTotal: 16035748 kB
MemFree: 208956 kB
MemAvailable: 5314984 kB
Buffers: 494680 kB
Cached: 5616432 kB
SwapCached: 19092 kB
Active: 3896780 kB
Inactive: 10010360 kB
Active(anon): 992028 kB
Inactive(anon): 8279308 kB
Active(file): 2904752 kB
Inactive(file): 1731052 kB
Unevictable: 484872 kB
Mlocked: 2492 kB
SwapTotal: 15999996 kB
SwapFree: 14608892 kB
Dirty: 37508 kB
Writeback: 0 kB
AnonPages: 8269488 kB
Mapped: 827992 kB
Shmem: 1478876 kB
KReclaimable: 809792 kB
Slab: 1034028 kB
SReclaimable: 809792 kB
SUnreclaim: 224236 kB
KernelStack: 33056 kB
PageTables: 96408 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 24017868 kB
Committed_AS: 26950740 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 113240 kB
VmallocChunk: 0 kB
Percpu: 8896 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
FileHugePages: 0 kB
FilePmdMapped: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
DirectMap4k: 1494048 kB
DirectMap2M: 14925824 kB
DirectMap1G: 1048576 kB
重点关注这些数据:
MemTotal, 总内存
MemFree, 空闲内存
MemAvailable, 可用内存
Buffers, 缓冲
Cached, 缓存
SwapTotal, 交换内存
SwapFree, 空闲交换内存
提供的信息和 free 命令看到的差不多。
使用 vmstat -s 命令和选项, 可以对内存使用情况进行统计, 类似于 /proc/meminfo。
示例如下:
zz@xiaole:~$ vmstat -s
16035748 K total memory
8925540 K used memory
3833796 K active memory
10021940 K inactive memory
235024 K free memory
495068 K buffer memory
6380116 K swap cache
15999996 K total swap
1398784 K used swap
14601212 K free swap
1200660 non-nice user cpu ticks
6440 nice user cpu ticks
287555 system cpu ticks
12629333 idle cpu ticks
3373867 IO-wait cpu ticks
0 IRQ cpu ticks
57036 softirq cpu ticks
0 stolen cpu ticks
15916951 pages paged in
70642617 pages paged out
11714 pages swapped in
358647 pages swapped out
109474456 interrupts
209512321 CPU context switches
1687828473 boot time
101087 forks
最前面的几行,显示了内存总量,使用量,以及空闲内存等信息。
top 命令一般用于查看进程的CPU和内存使用情况;当然也会报告内存总量,以及内存使用情况,所以可用来监控物理内存的使用情况。
在输出信息的顶部展示了汇总信息。
示例输出:
zz@xiaole:~$ top
top - 15:25:25 up 6:10, 1 user, load average: 2.73, 2.77, 2.53
任务: 429 total, 1 running, 422 sleeping, 0 stopped, 6 zombie
%Cpu(s): 1.8 us, 1.2 sy, 0.0 ni, 73.0 id, 23.8 wa, 0.0 hi, 0.3 si, 0.0 st
MiB Mem : 15659.9 total, 225.7 free, 8710.2 used, 6724.0 buff/cache
MiB Swap: 15625.0 total, 14259.0 free, 1366.0 used. 5183.1 avail Mem
Renice PID 9586 to value
进程号 USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAND
各种操作系统提供的参数略有不同,一般来说都可以根据CPU和内存来排序。
例如:
# CentOS
top -o %MEM
top -o %CPU
# mac
top -o mem
top -o cpu
碰到不清楚的,请使用 top -h 查看帮助信息。
重点关注顶部的 KiB Mem 和 KiB Swap 这两行。 表示内存的总量、使用量,以及可用量。
buffer 和 cache 部分,和 free 命令展示的差不多。
与 top 命令类似, 但 htop 还展示了其他的各种信息, 而且支持彩色显示。
顶部的消息显示了CPU使用率, 以及RAM和交换内存的使用情况。
如果没安装,可以使用类似的命令:
yum install htop -y
想要查看物理内存的硬件信息,可以使用 demidecode 命令。
这个命令会输出物理内存相关的信息。
zz@xiaole:~$ sudo dmidecode -t 17
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 3.2.0 present.
Handle 0x0002, DMI type 17, 92 bytes
Memory Device
Array Handle: 0x0001
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
Size: 8192 MB
Form Factor: SODIMM
Set: None
Locator: Controller0-ChannelA-DIMM0
Bank Locator: BANK 0
Type: DDR4
Type Detail: Synchronous
Speed: 3200 MT/s
Manufacturer: SK Hynix
Serial Number: 22E2F3F7
Asset Tag: None
Part Number: HMAA1GS6CJR6N-XN
Rank: 1
Configured Memory Speed: 3200 MT/s
Minimum Voltage: Unknown
Maximum Voltage: Unknown
Configured Voltage: 1.2 V
Memory Technology: DRAM
Memory Operating Mode Capability: Volatile memory
Firmware Version: Not Specified
Module Manufacturer ID: Bank 1, Hex 0xAD
Module Product ID: Unknown
Memory Subsystem Controller Manufacturer ID: Unknown
Memory Subsystem Controller Product ID: Unknown
Non-Volatile Size: None
Volatile Size: 8 GB
Cache Size: None
Logical Size: None
Handle 0x0003, DMI type 17, 92 bytes
Memory Device
Array Handle: 0x0001
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
Size: 8192 MB
Form Factor: SODIMM
Set: None
Locator: Controller1-ChannelA-DIMM0
Bank Locator: BANK 0
Type: DDR4
Type Detail: Synchronous
Speed: 3200 MT/s
Manufacturer: SK Hynix
Serial Number: 22E2F69D
Asset Tag: None
Part Number: HMAA1GS6CJR6N-XN
Rank: 1
Configured Memory Speed: 3200 MT/s
Minimum Voltage: Unknown
Maximum Voltage: Unknown
Configured Voltage: 1.2 V
Memory Technology: DRAM
Memory Operating Mode Capability: Volatile memory
Firmware Version: Not Specified
Module Manufacturer ID: Bank 1, Hex 0xAD
Module Product ID: Unknown
Memory Subsystem Controller Manufacturer ID: Unknown
Memory Subsystem Controller Product ID: Unknown
Non-Volatile Size: None
Volatile Size: 8 GB
Cache Size: None
Logical Size: None
dmidecode -t 17 展示的信息包括 内存大小, 类型,带宽等信息。 当然,因为示例中使用的是虚拟机,所以有的信息是不可用的。
如果不加 -t 参数,则展示所有类型的硬件信息。 也可以指定其他 -t 参数来查看对应的硬件信息。
本文介绍的命令都可以在shell终端上执行,不需要图形界面来展示。
如果使用带有图形界面的Linux桌面系统,则使用图形工具会更直观。 一般来说图形桌面都会提供对应的系统监控工具。 输出容易理解的 cpu, 物理内存, 交换内存, 网络带宽等资源的使用信息。
https://www.binarytides.com/linux-command-check-memory-usage/
http://virtualthreads.blogspot.com/2006/02/understanding-memory-usage-on-linux.html