对于线程上下文切换,如果同进程内就是只是线程上下文切换,如果非同进程内则是进程上下文切换。下面进行线程上下文切换场景模拟。

  一、环境准备~模拟工具sysbench。

  1)安装git

    yum -y install git
  2)下载sysbench

    git clone https://github.com/akopytov/sysbench.git
  3)安装依赖

    yum install autoconf automake libtool -y
  4)编译安装
    cd sysbench/
    ./autogen.sh
    ./configure --without-mysql
    make && make install

  二、案例测试
    第一个终端,查看空闲系统的上下文切换次数:vmstat 1 5
      

    模拟线程上下文切换(以 10 个线程运行 5 分钟的基准测试):sysbench --threads=10 --time=300 threads run
      

    第二个终端,查看上下文切换:vmstat 1
      

    第三个终端通过 pidstat 来看进程的上下文切换次数:pidstat -w -u 1

       

    实际上,通过上图输出分析:pidstat 的输出你可以发现,CPU 使用率的升高果然是 sysbench 导致的,它的 CPU 使用率已经达到了 100%以上。但上下文切换则是来自其他进程。
    为什么几个命令查看的效果不一致?!因为pidstat 参数-t才能查看到线程相关的信息,执行命令pidstat -w -u -t 1 5

      

    现在可以通过上图知道:虽然 sysbench 进程(也就是主线程)的上下文切换次数看起来并不多,但它的子线程的上下文切换次数却有很多。看来,上下文切换罪魁祸首,还是过多的 sysbench 线程。
  

  综合上述,根据上下文切换的类型,具体分析
    1. 自愿上下文切换多了,说明进程都在等待资源,有可能发生了 I/O 等其他问题
    2. 非自愿上下文切换多了,说明进程都在被强制调度,也就是都在争抢 CPU,说明 CPU 的确成了瓶颈
    3. 中断次数变多了,说明 CPU 被中断处理程序占用,还需要通过 /proc/interrupts 文件来分析具体的中断类型

    

  

    

  

最新文章

  1. 不同数据库中同一张表的SQL循环修改语句
  2. QML引擎的演进,第一部分
  3. test dword ptr [eax],eax ; probe page. visual studio
  4. 在有EditText控件的AlertDialog对话框中自动弹出输入法
  5. 【J2EE性能分析篇】JVM参数对J2EE性能优化的影响
  6. PHP学习笔记 - 入门篇(3)
  7. USACO3.22Stringsobits
  8. android应用版本更新功能---完整版
  9. idea 15 搭建maven web项目
  10. MSSQL 查询统计某状态出现的次数及累计时间
  11. 基于Python + requests 的web接口自动化测试框架
  12. javascript深入浅出——学习笔记(六种数据类型和隐式转换)
  13. D - GCD HDU - 1695 -模板-莫比乌斯容斥
  14. 【BZOJ】3282: Tree(lct)
  15. CorelCAD for Mac(绘图设计软件)破解版安装
  16. 洛谷P4147 玉蟾宫(动规:最大子矩形问题/悬线法)
  17. js switch 函数类型 序列化 转义
  18. 【uoj#225】[UR #15]奥林匹克五子棋 构造
  19. TCP/IP地址格式转换API
  20. Emgu cv 学习笔记

热门文章

  1. 使用HTMLTestRunner在目标目录下并未生成HTML文件解决办法
  2. 《剑指offer》面试题37. 序列化二叉树
  3. ctf--web刷题记录 ACTF2020back up file 、极客大挑战2019php、secret file
  4. 【机器学习】VAE
  5. T-SQL的游标和fetch
  6. vue-cli创建的项目打包成app引入字体图标的问题
  7. C++构造函数语义学(三)(基于C++对象模型)
  8. JavaIo流入门篇之字节流基本使用。
  9. Flutter 2.10 更新详解
  10. HowToDoInJava 其它教程 1 · 翻译完成