有一次测试过程需要查看开发板在增加负载的过程是否正常,由于在增加负载的过程中打印温度,打印温度可以通过脚本直接体现出来,负载也可以使用top命令打印出来,但是top命令用于保存脚本就比较费劲了,如何将负载打印到脚本中更适合保存呢?
这个时候我们就用到vmstat命令了。
vmstat命令是最常见的Linux/Unix监控工具,属于sysstat包。可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。
使用vmstat -h 查看帮助
root@localhost:~# vmstat -h
Usage:
vmstat [options] [delay [count]]
Options:
-a, --active active/inactive memory 显示活跃和非活跃内存
-f, --forks number of forks since boot 显示从系统启动至今的fork数量
-m, --slabs slabinfo 显示slabinfo
-n, --one-header do not redisplay header 只在开始时显示一次各字段名称。
-s, --stats event counter statistics 显示内存相关统计信息及多种系统活动数量
-d, --disk disk statistics 显示磁盘相关统计信息。
-D, --disk-sum summarize disk statistics
-p, --partition <dev> partition specific statistics 显示指定磁盘分区统计信息
-S, --unit <char> define display unit 使用指定单位显示。参数有 k 、K 、m 、M,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)
-w, --wide wide output 指定输出宽度
-t, --timestamp show timestamp
-h, --help display this help and exit
-V, --version output version information and exit
For more details see vmstat(8).
不做详细描述,下面只针对这个场景来描述我的使用方法
一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数 如 vmstat 2 1
显示字段说明如下:
类别 | 项目 | 含义 | 说明 |
Procs(进程) | r | 等待执行的任务数 | 展示了正在执行和等待cpu资源的任务个数。当这个值超过了cpu个数,就会出现cpu瓶颈。 |
B | 等待IO的进程数量 |
| |
Memory(内存) | swpd | 正在使用虚拟的内存大小,单位k |
|
free | 空闲内存大小 |
| |
buff | 已用的buff大小,对块设备的读写进行缓冲 |
| |
cache | 已用的cache大小,文件系统的cache |
| |
inact | 非活跃内存大小,即被标明可回收的内存,区别于free和active | 具体含义见:概念补充(当使用-a选项时显示) | |
active | 活跃的内存大小 | 具体含义见:概念补充(当使用-a选项时显示) | |
Swap | si | 每秒从交换区写入内存的大小(单位:kb/s) |
|
so | 每秒从内存写到交换区的大小 |
| |
IO | bi | 每秒读取的块数(读磁盘) | 块设备每秒接收的块数量,单位是block,这里的块设备是指系统上所有的磁盘和其他块设备,现在的Linux版本块的大小为1024bytes |
bo | 每秒写入的块数(写磁盘) | 块设备每秒发送的块数量,单位是block | |
system | in | 每秒中断数,包括时钟中断 | 这两个值越大,会看到由内核消耗的cpu时间sy会越多
秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目 |
cs | 每秒上下文切换数 | ||
CPU(以百分比表示) | us | 用户进程执行消耗cpu时间(user time) | us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期超过50%的使用,那么我们就该考虑优化程序算法或其他措施了 |
sy | 系统进程消耗cpu时间(system time) | sys的值过高时,说明系统内核消耗的cpu资源多,这个不是良性的表现,我们应该检查原因。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足 | |
Id | 空闲时间(包括IO等待时间)idle | 一般来说 us+sy+id=100 | |
wa | 等待IO时间(iowait) | wa过高时,说明io等待比较严重,这可能是由于磁盘大量随机访问造成的,也有可能是磁盘的带宽出现瓶颈。 | |
st | 实时进程占用cpu的时间(steal time) |
|
最终,我的老化脚本如下
#!/bin/bash
while true
do
vmstat 1 3
echo -----------------------------------
echo "`date +%T` current temperature : =`cat /sys/class/thermal/thermal_zone0/temp`"
done
使用vmstat 1 3的原因是我如果每次只打印一次,发现经常有cpu数据不正常的情况,后面2次都是正确的,为了保险,我每次打印3次,后面的语句作用是显示当前温度(实际温度*1000)
运行结果如下:
怎么样,是不是比较好用了啊,后面我再不同负载下的对应数据就不在这里显示了。