Linux系统查看内存使用情况

操作系统



一、 查看内存使用情况

在Linux系统中,大部分操作都通过命令行来完成,因为大部分情况下不开启图形界面。
在服务器环境,则只能通过shell执行操作。
下面介绍查看内存使用情况的相关命令。 包括物理内存(RAM)和交换内存(swap)。

我们经常需要检查服务器的内存使用情况,以及每个进程占用的内存,避免发生资源短缺进而影响用户体验。
对于网站和Web服务,必须具有足够的内存才能处理客户端请求。 如果内存不足,在请求高峰时就会变得缓慢,拥堵,甚至服务崩溃。
当然桌面系统也是同样的道理。

1. 使用 free 命令

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 这一行表示交换内存,从示例中的数字可以看到,基本上没使用到交换内存。

2. 查看 /proc/meminfo

另一种方法是读取 /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 命令看到的差不多。

3. 使用 vmstat 命令

使用 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

最前面的几行,显示了内存总量,使用量,以及空闲内存等信息。

4. 使用 top 命令

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 命令展示的差不多。

5. htop 命令

与 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

猜你喜欢

转载自blog.csdn.net/zyq880625/article/details/131417932