【Linux性能优化4】CPU上下文切换

如何查看系统的CPU上下文切换情况

vmstat可以查看系统的CPU上下文切换情况。它是一个常用的系统性能分析工具,主要用来分析系统的内存情况,也常用来分析系统的CPU上下文切换和中断的次数。

执行如下的命令:vmstat 5 (每隔5s输出一组数据)

在这里插入图片描述

这里需要重点关注以下几列的具体内容:
cs:即context switch 每秒钟上下文切换的次数,如上图中红色框。
in:每秒钟中断的次数。如上图中蓝色框
r:就绪队列的长度,也就是正在运行和等待CPU的进程数。如上图中的绿色框
b:则是处于不可中断睡眠状态的进程数。
Id:即idle 即cpu空闲占比
us+sy:即为cpu负载情况,即cpu使用率。

上面的vmstat只是给出了CPU的总体的上下文切换情况,如果要查看每个进程的CPU上下文切换则需要使用pidstat命令 并加上-w选项即可。

ubuntu执行如下的命令:pidstat –w 5

在这里插入图片描述

上面的输出中
PID列为进程号,
cswch/s为每秒钟自愿上下文切换次数。
cswch/s则为每秒钟非自愿上下文切换次数。

所谓的自愿上下文切换是指进程无法获取所需要的资源,例如IO,内存等系统资源不足时会发生自愿上下文切换。
而非自愿上下文切换,则是由于进程时间片已经到达等原因被系统强制调度进而发生的上下文切换,例如大量的进程都在竞争CPU时就会发生非自愿上下文切换。

案例分析

使用sysbench来模拟多线程调度切换的情况
sysbench是一个多线程的基准测试工具,一般用来评估不同系统参数下数据库的负载情况。在该案例中只是把它当做一个异常进程来模拟CPU上下文切换次数过多的问题。

(1)安装sysbench
Sudo apt-get update
Sudo apt-get install sysbench

(2)先使用vmstat查看系统空闲状态下的CPU上下文切换情况
在这里插入图片描述

如上的输出上下文切换次数最大也是291 后面基本维持在130次左右 cpu空闲占比98%左右 就绪队列r为0

(3)然后在中端1中运行如下的命令 模拟系统多线程调度的瓶颈
#以 10 个线程运行 5 分钟的基准测试,模拟多线程切换的问题
sysbench –test=threads –num-threads=10 --max-time=300 run
在这里插入图片描述

然后在第二个中端中运行如下的vmstat命令 查看上下文的切换情况。
在这里插入图片描述

从上面的输出信息可以看到 此时CPU的上下文切换次数已经达到了372662次 cpu的空闲状态id为0 就绪队列的数目r达到了8个
综合上述可以知道 由于就绪队列数目达到了8个远大于CPU数目2 因此会产生的大量的CPU竞争,导致了大量的CPU上下文切换从而使得CPU负载升高达到了100%。

(4)那么有如何分析到底是哪个进程导致了那么多的cpu上下文切换呢?
在第三个中端中继续运行如下的命令 pidstat –w –u 1
在这里插入图片描述

从pidstat的输出可以清楚的看到 cpu的负载升高果然是由sysbench导致的 CPU占用率已经达到了96.33%。但是下面的上下文切换次数的排列中却找不到sysbench命令 难道不是sysbench引起的 原来是pidstat命令默认显示进程的指标数据 需要加上-t选项后才会显示线程的指标数据。

在这里插入图片描述

在这里插入图片描述

从上面的输出可以看出来sysbench产生的线程所引起的上下文切换次数就达到了3万多次。

小结

(1)查看cpu上下文切换次数
vmstat 5 每秒钟输出5组数据
(2)sysbench模拟多线程调度
sysbench –test=threads –num-threads=10 --max-time=300 run
(3)查看进程状态
pidstat –w –u 1
如果还是输出进程中线程的状态 使用如下命令
pidstat –w –u –t 1
其中-w是输出进程的数据指标 -u则是输出CPU的数据指标 -t输出线程的数据指标

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值