目录

1.从系统层面看:vmstat 1 3

2.从进程层面看:pidstat -w

3.从线程层面看上下文切换:pidstat -wt

4.案例:

1.使用sysbench模拟多线程切换.

yum install -y sysbench

sysbench --threads=10 --max-time=300 threads run

模拟10个线程,运行300s.

2.查看系统平均负载:watch -d uptime.

3.vmstat观察系统的cs(context switch)数据.

r:可运行进程队列长度达到了10,超过系统cpu个数2,有大量cpu竞争.

in:终端次数飙升

cs:上下文切换次数从12次/s飙升至110万次/s.

us+sy:≈100%,sy高达75%,说明内核占用cpu较高.

4.使用pidstat -w观察进程级别的cs数据.

5.使用pidstat -wt观察线程级别的cs数据.

5.案例分析:

综上指标可得,系统的就绪队列中进程数较多,也就是运行中和等待cpu调度的进程数过多导致了大量的上下文切换,据查可知是sysbench频繁的上下文切换导致系统的cpu占用率过高.

6.针对上下文切换类型分析:

1.如果cswh/s(自愿上下文切换)变多了,说明进程在资源等待,有可能发生了I/O瓶颈等问题.

2.如果nvcswh/s(非自愿上下文切换)变多了,说明进程被强制剥离cpu调度,也就是众多进程在抢夺cpu,说明cpu成了瓶颈.

3.in(中断)次数多了,说明cpu被中断处理程序占用,需要分析是哪种类型的中断.

1.使用 watch -d cat /proc/interrupts查看cpu中断数据.

2.使用cpu使用率描述cpu的性能

a.top:查看系统总体cpu和内存使用情况,包括各进程的资源使用情况

top无法区分us%用户态cpu,sys%内核态cpu的使用情况.

b.pidstat 1 3:pidstat可查看用户态进程和内核态进程cpu使用情况.

c.ps:显示每个进程的资源使用情况.


vmstat:

vmstat命令可查看服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写等情况。这个命令是我查看Linux/Unix最喜爱的命令,相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样).

1.从系统层面看:vmstat 1 3

vmstat 1 3:每个1秒抓取一次,总共抓取3次.

重点关注:

r:        运行队列中进程数(就是说多少个进程正在运行或可运行) ,当这个值超过了CPU数目,

就会出现CPU瓶颈了.

b:        表示阻塞的进程.

swpd: 交换区内存已使用的大小,如果大于0,表示你的机器物理内存不足了.

  free:   空闲的物理内存的大小.

cache:pagecache(页缓存)直接用来记忆我们打开的文件,给文件做缓冲,把空闲的物理内存的

一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时

buffer/cached会很快地被使用。

si:  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露

        so:  每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

bi:系统上所有的磁盘和其他块设备每秒接收的块数量,1块=1kb

        bo: 块设备每秒发送的块数量.

bi+bo值过大,且wa值较大,表明系统磁盘IO瓶颈.

in: 每秒CPU的中断次数,包括时间中断

cs: 系统层面看每秒上下文切换次数.上下文切换次数过多表示你的CPU大部分浪费在上下文

切换.

in+cs越大,说明内核消耗cpu越多.

us: 用户进程CPU时间

sy: 系统CPU时间

        id:  空闲 CPU时间

        wa: 等待IO CPU时间,一般超过20%就说明I/O等待严重.

2.从进程层面看:pidstat -w

-u 默认的参数,显示各个进程的CPU使用统计
-r 显示各个进程的内存使用统计
-d 显示各个进程的IO使用情况
-p 指定进程号
-w 显示每个进程的上下文切换情况
-t 显示选择任务的线程的统计信息外的额外信息

cswch/s:表示进程每秒自愿进行上下文切换的次数.

nvcswch/s:表示进程每秒非自愿进行上下文切换的次数.

3.从线程层面看上下文切换:pidstat -wt

-w 显示每个进程的上下文切换情况
-t 显示选择任务的线程的统计信息外的额外信息

4.案例:

1.使用sysbench模拟多线程切换.

yum install -y sysbench

sysbench --threads=10 --max-time=300 threads run

模拟10个线程,运行300s.

2.查看系统平均负载:watch -d uptime.

3.vmstat观察系统的cs(context switch)数据.

r:可运行进程队列长度达到了10,超过系统cpu个数2,有大量cpu竞争.

in:终端次数飙升

cs:上下文切换次数从12次/s飙升至110万次/s.

us+sy:≈100%,sy高达75%,说明内核占用cpu较高.

4.使用pidstat -w观察进程级别的cs数据.

发现sysbench的cswch/s和nvcswh/s数据为0,那是因为pidsata默认查看的是进程级别的

数据,sysbench发起的是线程负载,所以我们需要查看线程级别的数据.

5.使用pidstat -wt观察线程级别的cs数据.

5.案例分析:

综上指标可得,系统的就绪队列中进程数较多,也就是运行中和等待cpu调度的进程数过多导致了大量的上下文切换,据查可知是sysbench频繁的上下文切换导致系统的cpu占用率过高.

6.针对上下文切换类型分析:

1.如果cswh/s(自愿上下文切换)变多了,说明进程在资源等待,有可能发生了I/O瓶颈等问题.

2.如果nvcswh/s(非自愿上下文切换)变多了,说明进程被强制剥离cpu调度,也就是众多进程在抢夺cpu,说明cpu成了瓶颈.

3.in(中断)次数多了,说明cpu被中断处理程序占用,需要分析是哪种类型的中断.

1.使用 watch -d cat /proc/interrupts查看cpu中断数据.

2.使用cpu使用率描述cpu的性能

a.top:查看系统总体cpu和内存使用情况,包括各进程的资源使用情况

top无法区分us%用户态cpu,sys%内核态cpu的使用情况.

b.pidstat 1 3:pidstat可查看用户态进程和内核态进程cpu使用情况.

c.ps:显示每个进程的资源使用情况.

CPU分析系列--vmstat/pidstat -wt分析进程/线程上下文切换造成的性能瓶颈相关推荐

  1. cpu线程_进程/线程上下文切换会用掉你多少CPU?

    进程是操作系统的伟大发明之一,对应用程序屏蔽了CPU调度.内存管理等硬件细节,而抽象出一个进程的概念,让应用程序专心于实现自己的业务逻辑既可,而且在有限的CPU上可以"同时"进行许 ...

  2. mysql 上下文切换高_进程/线程上下文切换会用掉你多少CPU?

    进程是操作系统的伟大发明之一,对应用程序屏蔽了CPU调度.内存管理等硬件细节,而抽象出一个进程的概念,让应用程序专心于实现自己的业务逻辑既可,而且在有限的CPU上可以"同时"进行许 ...

  3. Java分析系列之五:常见的Thread Dump日志案例分析

    我们在上篇文章中详细描述了Thread Dump中Native Thread和JVM Thread线程的各种状态及描述,今天总结分析的一些原则,并详细列举一些案例进行说明. 目录 [隐藏] 1 症状及 ...

  4. BlogEngine.Net架构与源代码分析系列(转载)

    01.BlogEngine.Net架构与源代码分析系列part1:开篇介绍 02.BlogEngine.Net架构与源代码分析系列part2:业务对象--共同的父类BusinessBase 03.Bl ...

  5. BlogEngine.Net架构与源代码分析系列part12:页面共同的基类——BlogBasePage

    上一篇文章我向大家展示了BlogEngine.Net中Theme的原理和一些开发规范,里面有很多内容和这篇文章有着联系,建议大家这两篇文章结合在一起看,这样效果会更好.在这篇文章中我主要向大家说明Bl ...

  6. 因果分析系列1--入门

    因果分析系列1--入门 因果分析系列1--入门 因果简介 相关不是因果 基本符号定义 数值分析 偏差 图解偏差 因果分析系列1–入门 因果简介 目前机器学习非常擅长回答预测问题.新的人工智能浪潮并未给 ...

  7. 进程 线程 协程 各自的概念以及三者的对比分析

    文章目录 1 进程 2 线程 3 进程和线程的区别和联系 3.1 区别 3.2 联系 4 举例说明进程和线程的区别 5 进程/线程之间的亲缘性 6 协程 线程(执行一个函数)和协程的区别和联系 协程和 ...

  8. live555源码分析(四)RTSPServer分析

    live555源码分析系列 live555源码分析(一)live555初体验 live555源码分析(二)基本组件上 live555源码分析(三)基本组件下 live555源码分析(四)RTSPSer ...

  9. 【操作系统/OS笔记10】进程/线程的调度原则、调度算法、实时调度、多处理器调度、优先级反转

    本次笔记内容: 8.1 背景 8.2 调度原则 8.3 调度算法1 8.4 调度算法2 8.5 实时调度 8.6 多处理调度与优先级反转 文章目录 CPU调度背景 上下文切换 CPU调度 在进程/线程 ...

最新文章

  1. zabbix web前端取值同后端取值不一致
  2. iOS开发使用Unwind Segue进行返回
  3. OCR的备份与恢复方法
  4. C语言extern关键字(去使用外部全局变量、函数)
  5. Don't Laugh!I'm An English Book笔记(五)——面部词语大总结加补充
  6. freerdp 解压安装_Ubuntu下编译安装运作FreeRdp连接Windows
  7. Linux简单命令集——less
  8. 软件工程师如何自学成才?
  9. 最长数组对 Maximum Length of Pair Chain
  10. Yii2 使用 faker 生成假数据(转)
  11. sql删除重复数据只保留一条的操作方法
  12. 微软员工和 GitHub 员工宣布支持 996.ICU 运动,来签个名呗?
  13. matlab零序五次谐波,基于5次谐波的小电流接地系统故障选线方法仿真与分析.docx...
  14. 浅谈iOS中关于app的优化
  15. JavaScript-----JSON和数组对象
  16. 计算机视觉——三维视觉 I
  17. python--format
  18. python中arch模块_在Arch下安装pip
  19. 在 qiankun 中实现经纬度坐标拾取、点位展示
  20. 农产品追溯管理软件开发

热门文章

  1. ISO 26262系列文章之————5 硬件开发
  2. 解决Windows10开机黑屏问题
  3. [原创] Photoshopt午简单的调出暗青色效果
  4. 水库大坝安全监测监控系统平台axure分析+辽阳市水库大坝安全检测平台+志豪未来科技有限公司+陈志豪
  5. 实战案例讲解:用户画像如何应用?
  6. NYOJ1237_最大岛屿
  7. USACO美国信息学奥赛竞赛12月份开赛,中国学生备赛指南
  8. 三极管的检测及其管脚的判别
  9. ECL模型计量与应用
  10. 官方完整HL7 ECG-XML例子及注释翻译(1)