一、 查看内存使用情况
在Linux系统中,大部分操作都通过命令行来完成,因为大部分情况下不开启图形界面。
在服务器环境,则只能通过shell执行操作。
下面介绍查看内存使用情况的相关命令。 包括物理内存(RAM)和交换内存(swap)。
我们经常需要检查服务器的内存使用情况,以及每个进程占用的内存,避免发生资源短缺进而影响用户体验。
对于网站和Web服务,必须具有足够的内存才能处理客户端请求。 如果内存不足,在请求高峰时就会变得缓慢,拥堵,甚至服务崩溃。
当然桌面系统也是同样的道理。
1. 使用 free
命令
free
命令是Linux系统中最简单和最常用的内存查看命令, 示例如下:
$ free -mtotal used free shared buff/cache available
Mem: 7822 321 324 377 7175 6795
Swap: 4096 0 4095$ free -htotal used free shared buff/cache available
Mem: 7.6G 322M 324M 377M 7.0G 6.6G
Swap: 4.0G 724K 4.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
目录下都是虚拟文件,包含内核以及操作系统相关的动态信息。
$ cat /proc/meminfo
MemTotal: 8010408 kB
MemFree: 323424 kB
MemAvailable: 6956280 kB
Buffers: 719620 kB
Cached: 5817644 kB
SwapCached: 132 kB
Active: 5415824 kB
Inactive: 1369528 kB
Active(anon): 385660 kB
Inactive(anon): 249292 kB
Active(file): 5030164 kB
Inactive(file): 1120236 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 4194304 kB
SwapFree: 4193580 kB
Dirty: 60 kB
Writeback: 0 kB
AnonPages: 247888 kB
Mapped: 61728 kB
Shmem: 386864 kB
Slab: 818320 kB
SReclaimable: 788436 kB
SUnreclaim: 29884 kB
KernelStack: 2848 kB
PageTables: 5780 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 8199508 kB
Committed_AS: 942596 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 22528 kB
VmallocChunk: 34359707388 kB
HardwareCorrupted: 0 kB
AnonHugePages: 88064 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 176000 kB
DirectMap2M: 6115328 kB
DirectMap1G: 4194304 kB
重点关注这些数据:
MemTotal
, 总内存MemFree
, 空闲内存MemAvailable
, 可用内存Buffers
, 缓冲Cached
, 缓存SwapTotal
, 交换内存SwapFree
, 空闲交换内存
提供的信息和 free
命令看到的差不多。
3. 使用 vmstat
命令
使用 vmstat -s
命令和选项, 可以对内存使用情况进行统计, 类似于 /proc/meminfo
。
示例如下:
$ vmstat -s8010408 K total memory344016 K used memory5444384 K active memory1380052 K inactive memory283468 K free memory719668 K buffer memory6663256 K swap cache4194304 K total swap724 K used swap4193580 K free swap132859985 non-nice user cpu ticks29816 nice user cpu ticks37600986 system cpu ticks6643195204 idle cpu ticks2721822 IO-wait cpu ticks0 IRQ cpu ticks592418 softirq cpu ticks0 stolen cpu ticks13092214 pages paged in293257816 pages paged out8 pages swapped in1365 pages swapped out3396492150 interrupts1327657196 CPU context switches1548248091 boot time8811556 forks
最前面的几行,显示了内存总量,使用量,以及空闲内存等信息。
4. 使用 top
命令
top
命令一般用于查看进程的CPU和内存使用情况;当然也会报告内存总量,以及内存使用情况,所以可用来监控物理内存的使用情况。
在输出信息的顶部展示了汇总信息。
示例输出:
top - 15:20:30 up 6:57, 5 users, load average: 0.64, 0.44, 0.33
Tasks: 265 total, 1 running, 263 sleeping, 0 stopped, 1 zombie
%Cpu(s): 7.8 us, 2.4 sy, 0.0 ni, 88.9 id, 0.9 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 8167848 total, 6642360 used, 1525488 free, 1026876 buffers
KiB Swap: 1998844 total, 0 used, 1998844 free, 2138148 cachedPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2986 enlighte 20 0 584m 42m 26m S 14.3 0.5 0:44.27 yakuake 1305 root 20 0 448m 68m 39m S 5.0 0.9 3:33.98 Xorg 7701 enlighte 20 0 424m 17m 10m S 4.0 0.2 0:00.12 kio_thumbnail
各种操作系统提供的参数略有不同,一般来说都可以根据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
命令。
这个命令会输出物理内存相关的信息。
$ dmidecode -t 17# dmidecode 3.0
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.Handle 0x1100, DMI type 17, 40 bytes
Memory DeviceArray Handle: 0x1000Error Information Handle: Not ProvidedTotal Width: UnknownData Width: UnknownSize: 8192 MBForm Factor: DIMMSet: NoneLocator: DIMM 0Bank Locator: Not SpecifiedType: RAMType Detail: OtherSpeed: UnknownManufacturer: Alibaba CloudSerial Number: Not SpecifiedAsset Tag: Not SpecifiedPart Number: Not SpecifiedRank: UnknownConfigured Clock Speed: UnknownMinimum Voltage: UnknownMaximum Voltage: UnknownConfigured Voltage: Unknown
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