Linux 状态命令之内存状态 vmstat

简介

vmstat 命令主要是用来检测虚拟内存的,可以展现给定时间间隔的服务器的状态值,包括 CPU 使用率、内存使用率、虚拟内存交换情况、IO 读写情况等。

语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
vmstat [options] [delay [ count]]

options
-a:显示活跃和非活跃内存;
-f:显示从系统启动至今的fork数量;
-m:显示slabinfo;
-n:只在开始时显示一次各字段名称;
-s:显示内存相关统计信息及多种系统活动数量;
-d:显示磁盘相关统计信息;
-p:显示指定磁盘分区统计信息;
-S:使用指定单位显示,参数有 k 、K 、m 、M,分别代表1000102410000001048576字节(byte),默认单位为K;
-V:显示vmstat版本信息;
delay:刷新时间间隔,如果不指定,只显示一条结果;
count:刷新次数,如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷;

示例

1
2
3
4
5
6
7
8
[fenglepeng@centos]# vmstat 1 5  # 采样 5 次,每次间隔 1s
procs -----------memory----------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
5 0 0 95380 147816 1216484 0 0 0 24 1 0 1 1 98 0 0
0 0 0 95380 147816 1216484 0 0 0 0 410 907 0 1 99 0 0
0 0 0 95396 147816 1216484 0 0 0 0 388 836 0 1 99 0 0
0 0 0 95396 147816 1216484 0 0 0 0 391 853 1 0 99 0 0
2 0 0 94144 147816 1216484 0 0 0 12 409 903 1 1 98 0 0

其中:

  • procs:进程。

    • r(run):表示运行或等待 CPU 时间片的进程数,如果该值长期大于服务器 CPU 的个数,则说明 CPU 资源不足。一般负载超过了 3 就比较高,超过了 5 就高,超过了 10 就不正常了,服务器的状态很危险;
    • b(block):表示等待资源的进程数,这个资源指的是I/O、内存等。比如,当磁盘读写非常频繁时,写数据就会变得很慢,此时 CPU 运算很快就结束了,但进程需要把计算的结果写入磁盘,这样进程的任务才算完成,此时这个进程只能慢慢地等待磁盘了,这个进程就是这个 b 状态。该数值如果长时间大于 1,则需要去查找问题;
  • memory:内存,单位:KB。

    • swpd:虚拟内存(swap 空间)已使用的大小;
    • free:空闲的物理内存的大小;
    • buff:存放目录里面有什么内容,文件的属性以及权限等;
    • cache:用来记忆我们打开过的文件和程序,做文件缓冲(当程序使用内存时,buff/cache 很快就会被使用);
  • swap:swap 空间,单位:KB。内存够用时,si 和 so 值都为0,如果这两个值长期大于 0,表示内存不够用了,系统性能会受到影响

    • si:表示从 swap 空间写入内存的数据量;
    • so:表示从内存写入 swap 空间的数据量;
  • io:单位:块/秒。

    • bi:每秒读取的块数(读磁盘),现在的 Linux 版本块的大小为 1024bytes;
    • bo:每秒写入的块数(写磁盘);
  • system:系统,这 2 个值越大,会看到由内核消耗的 CPU 时间会越大。

    • in:每秒 CPU 的中断次数,包括时间中断;
    • cs:每秒上下文切换数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进行上下文切换,这个值越小越好;
  • cpu:以百分比显示。

    • us(user time):用户进程执行时间;
    • sy(system time):系统进程执行时间;
    • id:空闲时间(包括IO等待时间);
    • wa:等待 IO 时间,wa 的值高时,说明 IO 等待比较严重,这可能由于磁盘大量做随机访问造成的,也有可能是磁盘出现瓶颈;
    • st:表示被偷走的 CPU 所占百分比(一般都为0,不用关注);
    • 备注:us + sy + id + wa =100% 这个是只是近似值

备注:

  • 如果 r 经常大于4,且 id 经常少于40,表示 cpu 的负荷很重。
  • 如果 pi,po 长期不等于 0,表示内存不足。
  • 如果 disk 经常不等于 0, 且在 b 中的队列大于 3, 表示 io 性能不好。
  • 如果 in 较高 cs 较低,说明 cpu 一直在请求资源。
  • 如果 us 在 80% 以上而且 cs 比较低 说明某个进程一直在占用 cpu。
  • 如果 cs 比 in 高很多说明上下文切换很多,进一步 sy 比 us 高很多,则说明正在运行的程序进行了大量的系统调用。

Linux 状态命令之内存状态 vmstat
https://flepeng.github.io/002-Linux-21-命令-Linux-状态命令之内存状态-vmstat/
作者
Lepeng
发布于
2021年7月5日
许可协议