CPU分析系列--vmstat/pidstat -wt分析进程/线程上下文切换造成的性能瓶颈
目录
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分析进程/线程上下文切换造成的性能瓶颈相关推荐
- cpu线程_进程/线程上下文切换会用掉你多少CPU?
进程是操作系统的伟大发明之一,对应用程序屏蔽了CPU调度.内存管理等硬件细节,而抽象出一个进程的概念,让应用程序专心于实现自己的业务逻辑既可,而且在有限的CPU上可以"同时"进行许 ...
- mysql 上下文切换高_进程/线程上下文切换会用掉你多少CPU?
进程是操作系统的伟大发明之一,对应用程序屏蔽了CPU调度.内存管理等硬件细节,而抽象出一个进程的概念,让应用程序专心于实现自己的业务逻辑既可,而且在有限的CPU上可以"同时"进行许 ...
- Java分析系列之五:常见的Thread Dump日志案例分析
我们在上篇文章中详细描述了Thread Dump中Native Thread和JVM Thread线程的各种状态及描述,今天总结分析的一些原则,并详细列举一些案例进行说明. 目录 [隐藏] 1 症状及 ...
- BlogEngine.Net架构与源代码分析系列(转载)
01.BlogEngine.Net架构与源代码分析系列part1:开篇介绍 02.BlogEngine.Net架构与源代码分析系列part2:业务对象--共同的父类BusinessBase 03.Bl ...
- BlogEngine.Net架构与源代码分析系列part12:页面共同的基类——BlogBasePage
上一篇文章我向大家展示了BlogEngine.Net中Theme的原理和一些开发规范,里面有很多内容和这篇文章有着联系,建议大家这两篇文章结合在一起看,这样效果会更好.在这篇文章中我主要向大家说明Bl ...
- 因果分析系列1--入门
因果分析系列1--入门 因果分析系列1--入门 因果简介 相关不是因果 基本符号定义 数值分析 偏差 图解偏差 因果分析系列1–入门 因果简介 目前机器学习非常擅长回答预测问题.新的人工智能浪潮并未给 ...
- 进程 线程 协程 各自的概念以及三者的对比分析
文章目录 1 进程 2 线程 3 进程和线程的区别和联系 3.1 区别 3.2 联系 4 举例说明进程和线程的区别 5 进程/线程之间的亲缘性 6 协程 线程(执行一个函数)和协程的区别和联系 协程和 ...
- live555源码分析(四)RTSPServer分析
live555源码分析系列 live555源码分析(一)live555初体验 live555源码分析(二)基本组件上 live555源码分析(三)基本组件下 live555源码分析(四)RTSPSer ...
- 【操作系统/OS笔记10】进程/线程的调度原则、调度算法、实时调度、多处理器调度、优先级反转
本次笔记内容: 8.1 背景 8.2 调度原则 8.3 调度算法1 8.4 调度算法2 8.5 实时调度 8.6 多处理调度与优先级反转 文章目录 CPU调度背景 上下文切换 CPU调度 在进程/线程 ...
最新文章
- zabbix web前端取值同后端取值不一致
- iOS开发使用Unwind Segue进行返回
- OCR的备份与恢复方法
- C语言extern关键字(去使用外部全局变量、函数)
- Don't Laugh!I'm An English Book笔记(五)——面部词语大总结加补充
- freerdp 解压安装_Ubuntu下编译安装运作FreeRdp连接Windows
- Linux简单命令集——less
- 软件工程师如何自学成才?
- 最长数组对 Maximum Length of Pair Chain
- Yii2 使用 faker 生成假数据(转)
- sql删除重复数据只保留一条的操作方法
- 微软员工和 GitHub 员工宣布支持 996.ICU 运动,来签个名呗?
- matlab零序五次谐波,基于5次谐波的小电流接地系统故障选线方法仿真与分析.docx...
- 浅谈iOS中关于app的优化
- JavaScript-----JSON和数组对象
- 计算机视觉——三维视觉 I
- python--format
- python中arch模块_在Arch下安装pip
- 在 qiankun 中实现经纬度坐标拾取、点位展示
- 农产品追溯管理软件开发