vmstat 是一个常用 的系统性能分析工具,主要用来分析系统的内存使用情况,也常用来分析CPU上下文切换和中断的次数
我们来 --help 一下
[root@localhost ~]# vmstat --htlp
vmstat: unrecognized option '--htlp'
Usage:
vmstat [options] [delay [count]]
其中 option 是 参数选项
delay 每次输出 相隔多少时间
count 共输出几次
比如一个 vmstat 的 一个使用示例:
[root@localhost ~]# vmstat 5 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 1 0 7692452 2108 161284 0 0 22 1 39 45 0 0 100 40 0
0 2 0 7692476 2108 161284 0 0 0 0 42 39 0 0 100 50 0
0 0 0 7692476 2108 161284 0 0 0 0 42 40 0 0 100 0 0
其中
cs (context switch) 是每秒 上下文切换次数,过多的上下文切换,会把CPU时间消耗在寄存器,内核栈以及虚拟内存等数据 的保存和
恢复上,缩短进程真正运行的时间,成了系统性能大幅下降的一个元凶
in (interrupt) 则是每秒中断的次数
r (running or runnable) 是就绪队列的长度,也就是正在运行和等待CPU的进程数
b (blocked) 则是处于不可中断睡眠状态的进程数. 意味着进程被阻塞。 主要是 指资源阻塞的进程队列数(比如IO资源,页面调度等)
swpd : 已使用 的虚拟内存大小
si : 从磁盘交换到swap 虚拟内存的交换页数量,单位:KB/秒。如果这个值大于0,表示物理内存不够用 或者 内存泄露了
so : 从 swap 虚拟内存交换到磁盘的交换页数量,单位: KB/秒。如果这个值大于0,表示物理内存不够用 或者 内存泄露了
bi : 每秒读 块设备 的大小
bo : 每秒写块设备的大小
linux 为每个CPU都维护了一个就绪队列,将活跃进程(即正在运行和正在等待CPU的进程)按照优先级和等待CPU的时间排序,然后选择最需要CPU的进程,也就是优先级最高和等待CPU时间最长的进程来运行,也就是 run 队列
虽然 us + sy 总共 也不是占据很多比列,但是出现了CPU处理等待的现象(r队列)。由于CPU只有一个核,因此这个run队列很容易出现尖峰
-a, --active active/inactive memory
显示 活动 于 非 活动 内存
[root@localhost ~]# vmstat 5 3 -a
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free inact active si so bi bo in cs us sy id wa st
1 0 0 7692880 76696 72252 0 0 14 1 34 37 0 0 100 0 0
0 0 0 7692888 76696 72288 0 0 0 0 44 43 0 0 100 0 0
0 0 0 7692888 76696 72288 0 0 0 0 43 40 0 0 100 0 0
参考资源
https://www.cnblogs.com/feng0815/p/8613547.html
极客时间