# 每隔5秒输出1组数据 $ vmstat 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0
其中:
-
cs(context switch)是每秒上下文切换的次数。
-
in(interrupt)则是每秒中断的次数。
-
r(Running or Runnable)是就绪队列的长度,也就是正在运行和等待CPU的进程数。
-
b(Blocked)则是处于不可中断睡眠状态的进程数。
pidstat -w 5 每隔5秒输出进程的中断数:
08:18:26 UID PID cswch/s nvcswch/s Command
。。。。。。。。。。。。。。。。。。。。。。。。
其中:
一个是 cswch ,表示每秒自愿上下文切换(voluntary context switches)的次数,另一个则是 nvcswch ,表示每秒非自愿上下文切换(non voluntary context switches)的次数。
这两个概念你一定要牢牢记住,因为它们意味着不同的性能问题:
-
所谓自愿上下文切换,是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换。
-
而非自愿上下文切换,则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换
要注意的是,pidstat -wt 中,加上参数t后,表示看出线程的上下文切换了。
查看什么类型的中断切换数高,可以用:
# -d 参数表示高亮显示变化的区域
$ watch -d cat /proc/interrupts