一)概述:
vmstat
procs -----------memory------------- -swap- -----io--- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 310596 24796 143780 0 0 933 89 1044 119 3 21 72 4 0
1)procs:
r:代表正在运行的进程数.
b:代表处在不可屏蔽中断的进程数.
2)memory:
swpd:已使用swap的空间大小.
free:空闲的内存.
buff:内存中buffer的大小.
cache:内存中cache的大小.
3)swap
si:从swap读出的内存,也就是主缺页,这个值是一个比率,即每秒读了多少KB.
so:置换到swap的内存,这个值是一个比率,即每秒写了多少KB.
4)io
bi:从磁盘读数据,这个值是一个比率,即每秒读了多少BLOCK.
bo:写数据到磁盘,这个值是一个比率,即每秒写了多少BLOCK.
5)system
in:每秒中断的次数.
cs:每秒转换上下文的次数.
6)
us:用户态进程使用CPU的百分比.
sy:内核态进程使用CPU的百分比.
id:处于空闲的CPU百分比.
wa:系统等待IO的CPU时间百分比.
st:来自于一个虚拟机偷取的CPU时间的百分比.
二)系统监控的实验:
实例一,大量的算术运算
本程序会进入一个死循环,不断的进行求平方根的操作,模拟大量的算术运算的环境.
测试源程序如下:
#include <stdio.h>
#include <math.h>
#include <unistd.h>
#include <stdlib.h>
void
run_status(void)
{
double pi = M_PI;
double pisqrt;
long i;
while(1){
pisqrt = sqrt(pi);
}
}
int
main (void)
{
run_status();
exit(EXIT_SUCCESS);
}
gcc run.c -o run -lm
./run&
运行:
vmstat 1
注:我们的程序不断的进行算术运算,r的值由0变成了1,而cpu的用户态利用率也达到了100%.如下:
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 304592 25244 147800 0 0 0 0 1010 31 0 1 99 0 0
0 0 0 304592 25244 147800 0 0 0 0 1020 37 0 0 100 0 0
1 0 0 304592 25244 147800 0 0 0 36 1016 46 69 1 30 0 0
1 0 0 304592 25244 147800 0 0 0 0 1067 56 100 0 0 0 0
1 0 0 304592 25244 147800 0 0 0 0 1010 31 100 0 0 0 0
实例二,大量的系统调用
本脚本会进入一个死循环,不断的执行cd命令,从而模拟大量系统调用的环境
测试脚本如下:
#!/bin/bash
while (true)
do
cd ;
done
chmod +x loop.sh
./loop.sh
运行:
vmstat 1
注:程序不断的调用cd命令,此时进程不断的进行上下文切换,所以cs的值会骤然提高,而cpu的内核态利用率也会达到98%左右.如下:
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 304592 25248 147804 0 0 111 15 1025 179 20 20 59 0 0
0 0 0 304592 25248 147804 0 0 0 0 1013 36 0 0 100 0 0
1 0 0 304592 25248 147816 0 0 0 0 1015 422 1 72 27 0 0
2 0 0 304592 25248 147816 0 0 0 0 1012 544 3 97 0 0 0
1 0 0 304592 25248 147816 0 0 0 0 1007 522 3 97 0 0 0
1 0 0 304592 25248 147816 0 0 0 64 1015 523 3 97 0 0 0
2 0 0 304592 25248 147816 0 0 0 0 1003 572 2 98 0 0 0
1 0 0 304592 25248 147816 0 0 0 0 1012 1263 2 98 0 0 0
1 0 0 304592 25248 147816 0 0 0 0 1006 1264 3 97 0 0 0
1 0 0 304592 25248 147816 0 0 0 0 1015 1249 3 97 0 0 0
实例三,大量的io操作
我们用dd命令,从/dev/zero读数据,写入到/tmp/data文件中,如下:
dd if=/dev/zero of=/tmp/data bs=1M count=1000
运行:
vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 302160 25868 149004 0 0 77 116 1027 151 14 17 69 0 0
1 0 0 302160 25868 149004 0 0 0 0 1018 35 0 1 99 0 0
3 0 0 134884 26032 311628 0 0 0 109872 1423 102 0 100 0 0 0
1 0 0 14596 26148 428808 0 0 0 117208 1372 120 0 100 0 0 0
1 0 0 6224 22908 440592 0 0 4 64944 1305 322 0 98 0 2 0
1 0 0 5976 21836 441016 0 0 4 79072 1447 162 0 51 0 49 0
0 2 0 5716 21956 439672 0 0 4 79016 1431 374 0 81 0 19 0
2 2 0 6180 22044 438064 0 0 0 61432 1392 285 0 61 0 39 0
2 2 0 6912 22104 436828 0 0 4 73980 1486 253 1 59 0 40 0
0 4 0 5876 14132 448856 0 0 8 63784 1378 313 0 69 0 31 0
0 2 4 5980 4140 457860 0 0 0 46756 1399 274 0 65 0 35 0
1 3 4 6060 3892 457580 0 0 8 69876 1398 214 0 46 0 54 0
1 4 4 6120 2872 457348 0 0 0 59920 1364 327 0 71 0 29 0
注:dd不断的向磁盘写入数据,所以bo的值会骤然提高,而cpu的wait数值也变高,说明由于大量的IO操作,系统的瓶径出现在低速的设备上.
由于对文件系统的写入操作,cache也从149004KB提高到了457348KB,又由于大量的写中断调用,in的值也从1018提高到1364.