vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。相比top,vmstat可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。
使用vmstat命令可以输出一条服务器状态信息:
可以在vmstat命令后添加2个参数,第一个参数表示间隔多长时间获取一次信息,单位为秒,第二个参数表示输出几个信息后停止获取:
第二个参数是缺省的,如果省略,则会一直输出状态信息,直至使用"Ctrl + C"停止vmstat:
现在来详细解释下这些参数:
procs
r --> 当前等待运行的进程队列,如果其超过了cpu内核数目,则表示这个cpu负载过高,cpu很繁忙,服务器的状态很危险。
b --> 表示阻塞的进程。
memory
swpd --> 虚拟内存已使用的大小,也就是已经有多少内存已经被交换到了交换文件货磁盘,如果大于0,表示机器物理内存不足了,如果不是程序内存泄露的原因,那么就该升级内存了或者把耗内存的任务迁移到其他机器。
free --> 空闲的物理内存的大小,或者说是未分配的可用内存。
buff --> 正在使用中的内存。
cache --> 直接用来记忆我们打开的文件,给文件做缓冲,也有一种说法是显示了有多少内存可以被交换到交换文件或者磁盘上。
swap
si --> 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。
so --> 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
io
bi --> 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte。
bo --> 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
system
in --> 每秒CPU的中断次数,包括时间中断。
cs --> 每秒系统为了处理任务而上下文切换的次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用。
cpu
us --> 用户CPU使用时间,即处理器在非内核程序消耗的时间。
sy --> 系统CPU使用时间,即处理内核相关任务消耗的时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
id --> 空闲CPU使用时间,一般来说,id + us + sy = 100。
wt --> 等待IO CPU时间。
显示活跃和非活跃内存
在vmstat后加入-a选项
显示磁盘统计数据总结
vmstat也可以打印系统磁盘活动统计。使用-D选项
显示单位
可以选择你想打印的显示单位字符。在-S后跟上k (小写,1000)、 K (大写,1024)、 m (小写,1000000)、 M (大写,1048576) 字节. 如果你不想选择单位,默认使用的是K (1024)。
显示某个磁盘分区的详细统计数据
可以使用-p选项跟上设备名