学习笔记

Study notes

Linux vmstat命令详解

云逐梦18012022-03-29 15:33:00返回列表

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。

一、前言

        vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。它是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。vmstat工具提供了一种低开销的系统性能观察方式。因为vmstat本身就是低开销工具,在非常高负荷的服务器上,你需要查看并监控系统的健康情况,在控制窗口还是能够使用vmstat输出结果。

二、虚拟内存原理

    在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间。当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。

    在Linux内存管理中,主要是通过“调页Paging”和“交换Swapping”来完成上述的内存调度。调页算法是将内存中最近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。交换技术是将整个进程,而不是部分页面,全部交换到磁盘上。

    分页(Page)写入磁盘的过程被称作Page-Out,分页(Page)从磁盘重新回到内存的过程被称作Page-In。当内核需要一个分页时,但发现此分页不在物理内存中(因为已经被Page-Out了),此时就发生了分页错误(Page Fault)。

    当系统内核发现可运行内存变少时,就会通过Page-Out来释放一部分物理内存。经管Page-Out不是经常发生,但是如果Page-out频繁不断的发生,直到当内核管理分页的时间超过运行程式的时间时,系统效能会急剧下降。这时的系统已经运行非常慢或进入暂停状态,这种状态亦被称作thrashing(颠簸)。

三、vmstat详解

    1、命令格式

vmstat [-a] [-n] [-S unit] [delay [ count]]
vmstat [-s] [-n] [-S unit]
vmstat [-m] [-n] [delay [ count]]
vmstat [-d] [-n] [delay [ count]]
vmstat [-p disk partition] [-n] [delay [ count]]
vmstat [-f]
vmstat [-V]

    2、命令参数

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

    3、实例介绍

    实例一:显示虚拟内存使用情况

    命令:

    vmstat 2 3

    表示在2秒时间内进行3次采样。将得到一个数据汇总他能够反映真正的系统情况。

image.png



vmstat 命令输出字段及含义
字段含义
procs进程信息字段:
  • -r:等待运行的进程数,数量越大,系统越繁忙。(当前运行队列中线程的数目,代表线程处于可运行状态,但CPU还未能执行.,这个值可以作为判断CPU是否繁忙的一个指标;当这个值超过了CPU数目,就会出现CPU瓶颈了;这个我们可以结合top命令的负载值同步评估系统性能;运行进程)

  • -b:不可被唤醒的进程数量,数量越大,系统越繁忙。(等待IO的进程数量;如果该值一直都很大,说明IO比较繁忙,处理较慢;阻塞进程

memory内存信息字段:
  • -swpd:虚拟内存的使用情况,单位为 KB。(如果swpd的值不为0,但是si,so的值长期为0,这种情况不会影响系统性能;

  • -free:空闲的物理内存容量,单位为 KB。

  • -buff:缓冲的内存容量,单位为 KB。

  • -cache:缓存的内存容量,单位为 KB。(如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小;

swap交换分区信息字段:
  • -si:从磁盘中交换到内存中数据的数量,单位为 KB。

  • -so:从内存中交换到磁盘中数据的数量,单位为 KB。

这两个数越大,表明数据需要经常在磁盘和内存之间进行交换,系统性能越差。
内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有时我们看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。
io磁盘读/写信息字段(单位:块/秒)
  • -bi:从块设备中读入的数据的总量,单位是块。

  • -bo:写到块设备的数据的总量,单位是块。

这两个数越大,代表系统的 I/O 越繁忙。
system系统信息字段:
  • -in:每秒被中断的进程次数。

  • -cs:每秒上下文切换次数。

这两个数越大,代表系统与接口设备的通信越繁,看到由内核消耗的CPU时间会越大。
cpuCPU信息字段:
  • -us:非内核进程消耗 CPU 运算时间的百分比。用户进程执行时间(user time)

  • -sy:内核进程消耗 CPU 运算时间的百分比。系统进程执行时间(system time)

  • -id:空闲 CPU 的百分比。(包括IO等待时间)

  • -wa:等待 I/O 所消耗的 CPU 百分比。(wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈。)

  • -st:被虚拟机所盗用的 CPU 百分比。

    备注: 如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。

    如果bi,bo 长期不等于0,表示内存不足。如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。

    Linux在具有高稳定性、可靠性的同时,具有很好的可伸缩性和扩展性,能够针对不同的应用和硬件环境调整,优化出满足当前应用需要的最佳性能。

    

    实例二:显示活跃和非活跃内存

    命令:

    vmstat -a 2 3

    使用-a选项显示活跃和非活跃内存时,所显示的内容除增加inact和active外,其他显示内容与例子1相同。

image.png

    字段说明:Memory(内存):

    inact: 非活跃内存大小(当使用-a选项时显示)

    active: 活跃的内存大小(当使用-a选项时显示)

    

    实例三:查看系统已经fork了多少次

    命令:

    vmstat -f

image.png

    说明:

    这个数据是从/proc/stat中的processes字段里取得的

    

    实例四:查看内存使用的详细信息

    命令:

    vmstat -s

image.png

    说明:

    这些信息的分别来自于/proc/meminfo,/proc/stat和/proc/vmstat。

    

    实例五:查看磁盘的读/写

    命令:

    vmstat -d

image.png

    说明:这些信息主要来自于/proc/diskstats.

    merged:表示一次来自于合并的写/读请求,一般系统会把多个连接/邻近的读/写请求合并到一起来操作.

    

    实例六:查看/dev/sda1磁盘的读/写

    命令:

    vmstat -p /dev/sda1

image.png

    说明:这些信息主要来自于/proc/diskstats。

    reads:来自于这个分区的读的次数。

    read sectors:来自于这个分区的读扇区的次数。

    writes:来自于这个分区的写的次数。

    requested writes:来自于这个分区的写请求次数。

    

    实例七:查看系统的slab信息

    命令:

    vmstat -m

    

    信息来自于/proc/slabinfo。

    slab:由于内核会有许多小对象,这些对象构造销毁十分频繁,比如i-node,dentry,这些对象如果每次构建的时候就向内存要一个页(4kb),而其实只有几个字节,这样就会非常浪费,为了解决这个问题,就引入了一种新的机制来处理在同一个页框中如何分配小存储区,而slab可以对小对象进行分配,这样就不用为每一个对象分配页框,从而节省了空间,内核对一些小对象创建析构很频繁,slab对这些小对象进行缓冲,可以重复利用,减少内存分配次数。


返回
顶部