过多上下文切换会把CPU时间消耗再寄存器、内核栈以及虚拟内存等数据的保存和恢复上,缩短进程真正运行时间,是系统性能下降的一个主要原因。
vmstat查看系统上下文切换情况:
- cs(context switch)每秒上下文切换次数
- in(interrupt)每秒中断次数
- r (running or runnable)正在运行和等待CPU进程数
- b(blocked)不可中断睡眠状态的进程数
vmstat 可以查看系统整体上下文切换情况,如果要看每个进程的上下文切换就需要用pidstat
pidstat查看每个进程上下文切换详细情况:
- cswch(voluntary context switches)自愿上下文切换:进程无法获取所需资源,导致上下文切换。比如I/O,内存等系统资源不足时会发生自愿上下文切换。
- nvcswch(non voluntary context switches)非自愿上下文切换:进程由于时间片已到等原因,被系统强制调度,发生上下文切换。比如大量进程都在争抢CPU时,就容易发生非资源上下文切换。