free
free显示系统内存整体使用情况。Linux内核可以将内存作为用于硬盘读取的高速缓存和作为用于硬盘写入的缓冲区。 free命令可以显示空闲内存加减这些cache和buffer。
free -g
total used free shared buff/cache available
Mem: 31 22 1 0 7 7
Swap: 15 4 10vmstat
vmstat即虚拟内存统计,使用它可以获取系统虚拟内存信息。
先来看几个例子:
vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 1 3017360 1360500 16 6152036 1 1 9 120 1 4 4 1 94 1 0- swpd: 当前交换到磁盘的内存量,单位KB
- free: 还未被系统或应用程序使用的物理内存总量,单位KB
- buff: 系统缓冲区大小,单位KB。用来存放等待保存到硬盘的数据的内存大小
- cache: 系统缓存大小,单位KB。用来保存之前从硬盘读取的数据,后续应用再需要该数据时,可以直接从内存获取数据以提高性能
- si: 上次采样中从硬盘交换入内存的交换速率,单位KB/s
- so: 上次采样中从内存交换到硬盘的交换速率,单位KB/s
vmstat -a
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free inact active si so bi bo in cs us sy id wa st
1 0 3016912 1351096 6952456 22147520 1 1 9 120 1 4 4 1 94 1 0- inact: 不活跃的内存大小,即适合交换到硬盘的内存大小,单位KB,
- act: 被使用的获取的内存大小
- 活跃内存是指当前被进程使用的内存,不活跃内存是指已经分配但暂时还未使用的内存
- buff和cache的内存即可以是活跃的,也可以是不活跃的
vmstat -s
32531016 K total memory
25015072 K used memory
22148052 K active memory
6956176 K inactive memory
1346884 K free memory
16 K buffer memory
6169044 K swap cache
16383996 K total swap
3016724 K used swap
13367272 K free swap
35973318 non-nice user cpu ticks
856 nice user cpu ticks
7150678 system cpu ticks
940254202 idle cpu ticks
13302172 IO-wait cpu ticks
0 IRQ cpu ticks
230890 softirq cpu ticks
0 stolen cpu ticks
90115333 pages paged in
1195522454 pages paged out
1358399 pages swapped in
2175658 pages swapped out
3364058660 interrupts
1803704790 CPU context switches
1503886288 boot time
2985037 forks- pages paged in: 从硬盘读入系统缓冲区的内存大小,单位为页,一般1页为4KB
- pages paged out: 从系统高速缓存写到硬盘的内存大小,单位为页,一般1页为4KB
- pages swapped in: 从交换分区读入系统内存的内存大小,单位为页
- pages swapped out: 从系统内存写到交换区的内存大小,单位为页
- used swap: 当前使用的交换分区大小
- free swap: 当前可用的交换分区大小
- total swap: 系统的交换分区大小
物理内存在寻址时,Linux将其分成内存页。当分配内存时,Linux操作的单位是页,而不是单个字节。对IA32(即Intel Architecture 32bit),页面大小为4KB。 在某些情况下,这样的页面大小会带来很高的跟踪开销,因此内存可以使用更大的块来操作内存,这些块被称为HugePage,容量为2048KB,这就可以降低管理和跟踪的开销,但如果HugePage不能被填满就会浪费内存。 HugePage对管理8GB以上内存更加高效。
vmstat -m
Cache Num Total Size Pages
nf_conntrack_ffff880710706180 867 867 320 51
nf_conntrack_ffff8805fd6b9380 408 408 320 51
nf_conntrack_ffff8807f13e4e00 1887 1887 320 51
nf_conntrack_ffff8807f0eaba80 255 255 320 51
nf_conntrack_ffff8807f0ea9380 1785 1887 320 51
nf_conntrack_ffff880633e12700 2295 2295 320 51
nf_conntrack_ffff88003de61380 408 408 320 51
nf_conntrack_ffff8807f13e1380 408 408 320 51
nf_conntrack_ffffffff81a9cd80 2275 2805 320 51
kvm_vcpu 0 0 16576 1
kvm_mmu_page_header 0 0 168 48
xfs_dqtrx 0 0 528 62
xfs_dquot 0 0 472 69
xfs_ili 452694 458397 152 53
xfs_inode 477255 477963 1088 30
xfs_efd_item 1640 1640 400 40
......vmstat -m输出Linux内核分片信息,该信息展现了内核内存是符合分配的,可以帮助确认那部分内核消耗内存最多
top
top命令运行时可以使用一些选项进行切换。
输入切换项m会将内存使用信息显示出来
top - 08:11:45 up 33 days, 20:30, 1 user, load
Tasks: 184 total, 1 running, 183 sleeping, 0
%Cpu(s): 0.5 us, 0.0 sy, 0.0 ni, 99.5 id, 0.
KiB Mem : 21.0/15474852 [||||||||||| ]
KiB Swap: 0.0/4194300 [输入切换项M,将按内存使用量排序,实际分配给进程的内存可能大于其使用量,该选项实际是按进程驻留集大小排序,驻留集即进程的实际使用量,而不是其请求量。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
522 root 20 0 83028 34248 33916 S 0.0 0.2 0:47.11 systemd-journal
937 root 20 0 303776 21548 18704 S 0.0 0.1 0:18.68 rsyslogd
23217 65534 20 0 161224 20228 12884 S 0.0 0.1 0:24.99 php-fpm7
14762 65534 20 0 158944 18388 13380 S 0.0 0.1 2:46.82 php-fpm7
12154 65534 20 0 160976 16892 9852 S 0.0 0.1 0:04.86 php-fpm7- VIRT: 进程虚拟内存的使用量。其中包含已经分配给应用程序但还未使用的全部内存
- RES: 进程实际使用的物理内存总量
- %MEM: 进程使用内存量占系统物理内存的百分比
- SHR: 可以和其他进程共享的内存大小(单位KB)
procinfo
procinfo是一个低开销的命令,适合长时间在控制台运行,procinfo从/proc文件系统显示系统的一些整体信息。
procinfo -n 1 -D
Memory: Total Used Free Buffers
RAM: 32531016 31682756 848260 16
Swap: 16383996 4351072 12032924
......- Total: 内存总量
- Used: 使用的物理内存总量
- Free: 未使用的物理内存总量
- Buffer: 用于磁盘写缓冲区的物理内存总量