既然我们知道频繁CPU上下文切换会导致平均负载升高,那么如何排除问题呢?
使用性能监控工具vmstat可以查看上下文切换次数,中断数,就绪队列长度,不可中断数等指标。
如上图所示,重点关注:
cs-每秒上下文切换次数
in-每秒中断数
r-就绪队列长度(正在运行或正在等待CPU的进程数)
b-不可中断睡眠进程数
us-用户态CPU使用率
sy-系统CPU使用率,一般为内核占用
如果发现cs列上下文切换次数过高(超过1万以上,经验值),就需要用pidstat -w 5查看进程上下文切换次数了。
cswch:自愿上下文切换,进程运行时由于系统资源不足,如IO,内存等原因不得不进行切换。
nvcswch:非自愿上下文切换,比如时间片用完,系统调度让其他任务运行,或者竞争CPU的时候也会发生。
查看进程上下文切换次数:
pidstat -wt 1 (w-上下文切换指标,t-线程)
内核实际调度的线程,所以要用t看上下文切换次数。
中断次数高可以查看/proc/interrupts 文件,其中的RES是重调度分配,多任务竞争CPU可以导致RES升高。
总之,排查上下文切换次数时,要结合上下文类型:
自愿的切换的多了,表明在等待资源,如IO
非自愿的切换的多了,表明CPU被任务竞争
中断数多,要结合/proc/interrupts分析具体中断情况
小编这里整理了更多相关的 学习资料和 学习视频,可免费领取。
加 VX:18410263200 通过验证备注:111(备注必填,方便通过)
网友评论