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

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

1. 使用 free 命令

free 命令是Linux系统中最简单和最常用的内存查看命令, 示例如下:

[root@centos ~]# free -m 
              total        used        free      shared  buff/cache   available
Mem:           1999         746         135          22        1117        1059
Swap:          2047           0        2047
[root@centos ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           2.0G        746M        135M         22M        1.1G        1.0G
Swap:          2.0G        264K        2.0G

其中, -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 目录下都是虚拟文件,包含内核以及操作系统相关的动态信息。

[root@centos ~]# cat /proc/meminfo
MemTotal:        2047268 kB
MemFree:          137532 kB
MemAvailable:    1084908 kB
Buffers:              96 kB
Cached:          1059956 kB
SwapCached:           32 kB
Active:          1081592 kB
Inactive:         476656 kB
Active(anon):     441580 kB
Inactive(anon):    80068 kB
Active(file):     640012 kB
Inactive(file):   396588 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       2097148 kB
SwapFree:        2096884 kB
Dirty:                24 kB
Writeback:             0 kB
AnonPages:        498228 kB
Mapped:           159592 kB
Shmem:             23452 kB
Slab:             144872 kB
SReclaimable:      85164 kB
SUnreclaim:        59708 kB
KernelStack:        7664 kB
PageTables:        35964 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     3120780 kB
Committed_AS:    3968652 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      292512 kB
VmallocChunk:   34358947836 kB
Percpu:              188 kB
HardwareCorrupted:     0 kB
AnonHugePages:    172032 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       92096 kB
DirectMap2M:     2004992 kB
DirectMap1G:           0 kB

重点关注这些数据:

  • MemTotal, 总内存
  • MemFree, 空闲内存
  • MemAvailable, 可用内存
  • Buffers, 缓冲
  • Cached, 缓存
  • SwapTotal, 交换内存
  • SwapFree, 空闲交换内存

提供的信息和 free 命令看到的差不多

3. 使用 vmstat 命令

使用 vmstat -s 命令和选项, 可以对内存使用情况进行统计, 类似于 /proc/meminfo

示例如下:

[root@centos ~]# vmstat -s
      2047268 K total memory
       764736 K used memory
      1081916 K active memory
       476624 K inactive memory
       137292 K free memory
           96 K buffer memory
      1145144 K swap cache
      2097148 K total swap
          264 K used swap
      2096884 K free swap
         5536 non-nice user cpu ticks
          786 nice user cpu ticks
         5935 system cpu ticks
       255784 idle cpu ticks
        10240 IO-wait cpu ticks
            0 IRQ cpu ticks
          447 softirq cpu ticks
            0 stolen cpu ticks
       994434 pages paged in
       563680 pages paged out
            0 pages swapped in
           14 pages swapped out
       518532 interrupts
      1039207 CPU context switches
   1656309212 boot time
        59682 forks

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

4. 使用 top 命令

top 命令一般用于查看进程的CPU和内存使用情况;当然也会报告内存总量,以及内存使用情况,所以可用来监控物理内存的使用情况。
在输出信息的顶部展示了汇总信息。

示例输出:

[root@centos ~]# top
top - 14:41:28 up 47 min,  3 users,  load average: 0.00, 0.01, 0.09
Tasks: 205 total,   3 running, 202 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us, 25.0 sy,  0.0 ni, 75.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2047268 total,   136552 free,   765188 used,  1145528 buff/cache
KiB Swap:  2097148 total,  2096884 free,      264 used.  1084248 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                 
    1 root      20   0  128540   7148   4220 S  0.0  0.3   0:02.66 systemd                                                                 
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                                                                
    4 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H                                                            
    6 root      20   0       0      0      0 S  0.0  0.0   0:04.40 ksoftirqd/0                                                             
    7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0                                                             
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh                                                                  
    9 root      20   0       0      0      0 R  0.0  0.0   0:02.43 rcu_sched                                                               
   10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-drain                                                           
   11 root      rt   0       0      0      0 S  0.0  0.0   0:00.26 watchdog/0                                                              
   13 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs                                                               
   14 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns                                                                   
   15 root      20   0       0      0      0 S  0.0  0.0   0:00.00 khungtaskd                                                              
   16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 writeback                                                               
   17 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kintegrityd                                                             
   18 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset                                                                  
   19 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset                                                                  
   20 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset                                                                  
   21 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kblockd                                                                 
   22 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 md                                                                      
   23 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 edac-poller                                                             
   24 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 watchdogd                                                               
   30 root      20   0       0      0      0 S  0.0  0.0   0:00.10 kswapd0                                                                 
   31 root      25   5       0      0      0 S  0.0  0.0   0:00.00 ksmd                                                                    
   32 root      39  19       0      0      0 S  0.0  0.0   0:00.12 khugepaged                                                              
   33 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 crypto                                                                  
   41 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kthrotld                                                                
   43 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kmpath_rdacd  

各种操作系统提供的参数略有不同,一般来说都可以根据CPU和内存来排序。

例如:

# CentOS
top -o %MEM
top -o %CPU

# mac
top -o mem
top -o cpu


碰到不清楚的,请使用 top -h 查看帮助信息。

重点关注顶部的 KiB Mem 和 KiB Swap 这两行。 表示内存的总量、使用量,以及可用量。
buffer 和 cache 部分,和 free 命令展示的差不多。

二、 查看物理内存信息

想要查看物理内存的硬件信息,可以使用 demidecode 命令。
这个命令会输出物理内存相关的信息。

$ dmidecode -t 17

# dmidecode 3.0
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.

Handle 0x1100, DMI type 17, 40 bytes
Memory Device
	Array Handle: 0x1000
	Error Information Handle: Not Provided
	Total Width: Unknown
	Data Width: Unknown
	Size: 8192 MB
	Form Factor: DIMM
	Set: None
	Locator: DIMM 0
	Bank Locator: Not Specified
	Type: RAM
	Type Detail: Other
	Speed: Unknown
	Manufacturer: Alibaba Cloud
	Serial Number: Not Specified
	Asset Tag: Not Specified
	Part Number: Not Specified
	Rank: Unknown
	Configured Clock Speed: Unknown
	Minimum Voltage: Unknown
	Maximum Voltage: Unknown
	Configured Voltage: Unknown

dmidecode -t 17 展示的信息包括 内存大小, 类型,带宽等信息。 当然,因为示例中使用的是虚拟机,所以有的信息是不可用的。

如果不加 -t 参数,则展示所有类型的硬件信息。 也可以指定其他 -t 参数来查看对应的硬件信息。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐