描述
vmstat报告有关进程、内存、分页、块IO、陷阱和cpu活动的信息。
注意:生成的第一份报告给出了上次重启以来的平均值。附加报告给出了采样周期长度延迟的信息。
目录
1. 语法
vmstat [选项] [ <时间间隔> [ <监控次数> ] ]
1.1. 常用参数
-w:扩大显示宽度,利于阅读
-t:显示时间戳
-d:监控磁盘统计数据
-p:指定某块分区
-S:指定单位(-S [k | K | m | M]:分别表示1000、1024、1000000、1048576字节(byte))
-n:使头部只显示一次,而不是周期性地显示
-m:显示slabinfo
-f:显示从系统启动至今的fork数量
2. 关键字解释
vmstat -twn 1 # 每秒输出一次
2.1. procs列:显示进程信息
r:运行队列中等待的进程数 #正在执行和等待CPU的任务数。当此列数大于cpu数量时,cpu将处于负载。正常情况应当低于cpu数量75%
b:等待IO的进程数 #IO消耗过高会出现此进程数大于0的情况。说明系统有未完成的磁盘I/O请求
2.2. memory列:显示内存信息
swpd :正在使用的虚拟内存 #当物理内存不足时才会调用虚拟内存,这时需要着重注意内存使用情况,一旦虚拟内存使用完,Linux系统将面临死机的情况
free :空闲的物理内存
buff :正在对块设备进行读写的缓冲 #用作缓冲的内存,内存不足时自动释放
cache:放置已打开文件的缓冲 #用作缓冲的内存,内存不足时自动释放
2.3. swap列:显示交换分区
si:从磁盘交换的内存量(/s) #物理内存不足时会启动交互分区,使用磁盘读写,此时性能开始变差
so:交换到磁盘的内存量(/s) #同上
2.4. io列:显示IO读写速度
bi:从块设备接收到的块(Blocks/s) #每秒磁盘读
bo:发送到块设备的块(Blocks/s) #每秒磁盘写
2.5. system列:显示系统信息
in:每秒CPU的中断次数(包括时间中断) #这个值越大,说明内核CPU消耗越严重
cs:每秒上下文切换次数 #注意:切换次数越多,CPU做事越少,性能也就会越差
2.6. cpu列:显示CPU信息
us:运行用户消耗CPU时间
sy:运行内核消耗CPU时间
id:CPU空闲时间 #不低于25%。超过25% 说明CPU消耗过高,会造成服务器响应变慢,用户使用不稳定
wa:等待IO的CPU时间 #不超过20%。当IO消耗过高,此时应当关注物理内存是否被消耗完,swap频繁使用,IO使用率可能达到100%
st:从虚拟机窃取的时间
3. 模拟消耗
3.1. 模拟CPU消耗
模拟CPU消耗shell脚本
vim cpu.sh
cpu(){
c=1
while true;do
c="$(( c + 1))"
done
}
num=$1
for (( i=1; i<=$num; i++));do
cpu &
done
执行脚本
bash cpu.sh 1 # 1表示进程数
杀死进程
ps -ef |grep cpu.sh |grep -v grep |awk '{print $2}' |xargs kill -9
3.2. 模拟内存消耗
使用 dd 命令写入80GB数据,走内存
time dd if=/dev/zero of=`pwd`/test_w bs=8k count=10485760
--if表示输入的文件名,这里直接指定磁盘
--of表示输出的文件名
--bs表示同时读入/输出的块大小
--count表示拷贝的块数
--数据大小 = bs * count
3.3. 模拟磁盘消耗
模拟磁盘读,共读出8GB(直接走磁盘,不通过内存)
time dd iflag=direct,nonblock if=/dev/sda2 of=/dev/null bs=8k count=1048576 #/dev/sda2 表示需要测试的块设备
模拟磁盘写,共写入8GB(直接走磁盘,不通过内存)
time dd oflag=direct,nonblock if=/dev/zero of=`pwd`/test_w bs=8k count=1048576 #没有指定某个块设备,表示测试当前路径所使用的磁盘
模拟磁盘同时读写,共读写8GB(直接走磁盘,不通过内存)
time dd iflag=direct,nonblock oflag=direct,nonblock if=/dev/sda2 of=`pwd`/test_rw bs=8k count=1048576 #/dev/sda2 表示需要测试的块设备