引发进程调度场景:
1.。 进程时间片耗尽,被系统挂起,切换到其它进程运行;
2。进程主动调用sleep进行进程切换;
3. 进程由于所依赖的资源未满足,进程会被挂起,调度其它进程运行;
4. 系统开启抢占时,被更高优先级进程抢占;
5. 硬件中断抢占当前进程;
不管是进程上下文或中断上下文,在切换的时候需要保存现场,系统过多的切换就会影响CPU性能,针对这类问题可以通过如下步骤进行分析:
1. 通过vmstat来对系统性能进行整体分析,查看cs,in次数是否存在剧烈变大趋势;其中cs表示1s内切换次数,in表示1s内中断次数;查看b,r进程数量,基本b表示处于不可中断休眠状态进程数,而r表示正在运行或等待CPU进程数;
2. 如果使用vmstat发现CPU上下文切换存在异常,则可以通过pidstat进一步分析,pidstat可以按进程或进程分析性能指标,pidstat -t 后可以分析到线程信息,查看具体线程CPU上下文切换状态;pidstat中cswch表示自愿上下文切换,通常是指无法获取所需要的资源,导致的上下文切换;而nvcswch表示非自愿上下文切换,表示进程由于时间片已到原因,被系统强制调度;