CPU部分总结

摘要:
1、 CPU性能指标1.首先,很容易想到CPU利用率,这也是实际环境中最常见的性能指标。CPU利用率是非空闲时间占总CPU时间的百分比。根据CPU上运行的不同任务,它分为用户CPU、系统CPU、等待I/OCPU、软中断和硬中断用户CPU利用率:包括用户CPU利用(user)和低优先级用户CPU利用度(nice),表示CPU在用户模式下运行的时间百分比。用户CPU使用率高,通常表示应用程序超过
一. CPU性能指标

1. 首先,最容易想到的是CPU使用率,也是实际环境中最常见的一个性能指标

CPU使用率是非空闲时间占总CPU时间的百分比,根据CPU上运行任务的不同,又被分为用户CPU,系统CPU,等待I/O CPU,软中断和硬中断

用户CPU使用率:包括用户态CPU使用率(user)和低优先级用户态CPU使用率(nice),表示CPU在用户态运行的时间百分比,用户CPU使用率高,通常说明:应用程序比较繁忙

系统CPU使用率:表示CPU在内核态运行的时间百分比(不包括中断),系统CPU使用率高,说明内核比较繁忙

等待I/O的CPU使用率:通常也成为iowait,表示等待I/O的时间百分比,iowait高,通常说明系统与硬件设备的I/O交互时间比较长

软中断和硬中断的CPU使用率:分别表示内核调用软中断处理程序,硬中断处理程序时间百分比,使用率高,通常说明系统发生了大量的中断

2. 第二个,应该是平均负载(Load Average),也就是系统的平均活跃进程数,它反映了系统的整体负载情况,主要包括三个数值:1分钟,5分钟,15分钟的平均负载

理想情况下是:平均负载等于逻辑CPU的个数,这表示每个CPU都刚好被充分利用,如果平均负载大于逻辑CPU个数,就表示负载比较大

3. 第三个,进程上下文切换,进程上下文切换分为无法获取资源导致的自愿上下文切换和被系统强制调度导致的非自愿上下文切换

二. 性能工具

1. 首先,平均负载的案例,先用uptime,查看了系统的平均负载,而在平均负载升高后,又用mpstat和pidstat,分别观察了每个CPU和每个进程CPU的使用情况,进而找出了导致平均负载升高的过程,也就是我们的性能压测工具:stress

2. 第二个:上下文切换的案例,先用vmstat,查看了系统的上下文切换次数和中断次数,然后通过pidstat,观察了进程的自愿上下文切换和非自愿上下文切换情况,最后通过pidstat,观察了线程的上下文切换情况,找到了上下文切换测试增多的根源,也就是我们的性能测试工具:sysbench

3. 第三个:java进程CPU使用率升高,我们先用top,查看了系统进程的使用情况,然后发现CPU使用率升高的进程Tomcat,也就是java应用,再查看相应的线程占用CPU很高,通过tid找到对应线程栈的状态,导致了老年代内存溢出

三. 这么多性能工具,怎么区分和选择

通过上面描述,我们发现每个场景的性能工具都不一样,这么多的工具要怎么区分和选择?

活学活用,把性能指标和性能工具联系起来:

第一个维度:从CPU的性能指标出发,也就是说,当你要查看某个性能指标时,要清楚知道哪些工具可以做到

性能指标工具说明
平均负载

uptime

top

uptime最简单

top提供了更全的指标

系统整体CPU使用率

vmstat

mpstat

top

sar

/proc/stat

top,vmstat,mpstat只可以动态查看,而sar还可以记录历史数据

/proc/stat,是其他性能工具的数据来源

进程CPU使用率

top

pidstat

ps

htop

atop

top和ps可以按CPU使用率给进程排序,而pidstat只显示实际用了CPU的进程

htop和atop以不同颜色显示更直观

系统上下文切换vmstat除了上下文切换次数,还提供运行状态和不可中断状态进程的数量
软中断

top

/proc/softirqs

mpstat

top提供软中断CPU使用率,而/proc/softirqs和mpstat提供了各种软中断在

每个CPU的运行次数

硬中断vmstat

提供总的中断次数

网络

dstat

sar

tcpdump

dstat和sar提供总的网络接收和发送情况,tcpdump是动态抓取正在进行的

网络通讯

I/O

dstat

sar

dstat和sar都提供了I/O的整体情况
CPU个数

/proc/cpuinfo

lscpu

lscpu更直观
事件剖析perfperf可以用来分析CPU的缓存以及内核调用链

第二个维度:从工具出发,如何快速分析CPU的性能瓶颈?

根据根据查指标
性能工具CPU性能指标
uptime平均负载
top平均负载,运行队列,整体的CPU使用率以及每个进程的状态和CPU使用率
htoptop增强版,以不同的颜色区分不同类型的进程,更直观
atopCPU,内存,磁盘和网络等各种资源的全面监控
vmstat系统整体的CPU使用率,上下文切换次数,中断次数,包括处于运行和不可中断状态的进程数量
mpstat每个CPU的使用率和软中断次数
pidstat进程和线程的CPU使用率,中断上下文切换次数
/proc/softirqs软中断类型和每个CPU上的累计中断次数
perfCPU性能事件剖析,如调用链分析,CPU缓存,CPU调度

所以要弄清楚每个性能指标的关联性,要知道每种指标的工作原理:比如用户CPU使用率很高,我们应该去排查进程的用户态而不是内核态,因为用户CPU使用率反映的就是用户态的CPU使用情况,而内核态的CPU使用情况只会反映到系统CPU使用率上

我们为了缩小排查范围,通常会先运行几个支持指标较多的工具:top,vmstat,pidstat

通过这张图发现,top,vmstat,pidstat这三个命令,几乎包含了所有重要的CPU性能指标,比如:

从top的输出可以得到各种CPU使用率以及平均负载等信息

从vmstat的输出可以得到上下文切换次数,中断次数,运行状态和不可中断的进程数

从pidstat的输出可以得到进程的用户CPU使用率,系统CPU使用率以及自愿上下文切换和非自愿上下文切换

另外:这三个工具输出的很多指标是相互关联的,所以用箭头连起来

CPU部分总结第1张

免责声明:文章转载自《CPU部分总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Protobuf 语法指南cocos2dx开发入门文档下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

0508操作系统

课后题:https://wenku.baidu.com/view/40a1cb3a3968011ca300919c.html 1.操作系统的定义 操作系统是运行在计算机硬件上的第一层软件,它是用户和计算机硬件系统之间的接口,用户通过os来使用计算系统,是计算机系统资源的管理者,实现了对计算机资源的抽象。计算机资源的抽象:OS在裸机上覆盖了I/O设备管理软件...

转://linux下的CPU、内存、IO、网络的压力测试工具与方法介绍

转载地址:http://wushank.blog.51cto.com/3489095/1585927 一、对CPU进行简单测试: 1、通过bc命令计算特别函数 例:计算圆周率 echo "scale=5000; 4*a(1)" | bc -l -q MATH LIBRARY        If bc is invoked with the -l...

java高并发解决方案

转载https://blog.csdn.net/GavinZhera/article/details/86471828 知识点 线程安全,线程封闭,线程调度,同步容器,并发容器,AQS,J.U.C,等等 高并发解决思路与手段 扩容:水平扩容、垂直扩容 缓存:Redis、Memcache、GuavaCache等 队列:Kafka、RabitMQ、Rocke...

【单片机】【PIC16F1937】之定时器

这篇文章是谈谈关于1937的定时器的,刚开始被晶振频率、时钟频率、振荡周期、振荡频率、指令周期、指令频率等等的名词绕晕了。先来解决这个问题。 晶振频率是代表振荡器的频率,说的是晶振这个器件的频率,因为一个单片机有内部外部晶振,比如你选择了内部晶振,那么这个晶振的频率就是你单片机的时钟频率, 振荡频率和晶振频率说的是一回事。振荡周期是1/(晶振频率),T =...

iOS- CoreData 数据库管理利器!

1.前文                              上次用SQLite3实现了数据管理,这次准备用CoreData来实现。 Core Data 是iOS SDK 里的一个很强大的框架,允许程序员以面向对象的方式储存和管理数据。使用Core Data框架,程序员可以很轻松有效地通过面向对象的接口管理数据 相比SQLite3来说,用CoreDa...

理解Linux系统负荷load average

理解Linux系统负荷   一、查看系统负荷 如果你的电脑很慢,你或许想查看一下,它的工作量是否太大了。 在Linux系统中,我们一般使用uptime命令查看(w命令和top命令也行)。(另外,它们在苹果公司的Mac电脑上也适用。) 你在终端窗口键入uptime,系统会返回一行信息。 这行信息的后半部分,显示"load average",它的意思是"系...