硬件性能 - CPU瓶颈分析

news2024/9/23 5:14:54

简介

本文章通过CPU各个指标项来简单分析是否出现CPU硬件性能瓶颈。其他硬件分析如下:

1. 硬件性能 - 掌握内存知识

2. 硬件性能 - 磁盘瓶颈分析

3. 硬件性能 - 网络瓶颈分析

目录

1. 系统负载

2. CPU利用率

3. 中断占用

4. 上下文切换


1. 系统负载

  • 系统负载是指在一段时间内有多少个进程等待 CPU 资源,常用的系统负载指标是平均负载值(load average)。通过观察平均负载值,可以初步判断 CPU 是否存在瓶颈

通过 uptime 命令查看系统负载

[yt@localhost ~]$ uptime 
06:33:10 up  9:24,  3 users,  load average: 35, 43, 41
  • 06:33:10:系统当前时间
  • up 9:24:系统已启动9时24分(天 : 时 : 分)
  • 3 users:当前系统已登录3个用户
  • load average:1/5/15分钟系统平均负载

  

简单判断

        通过上述 uptime 结果,1/5/15分钟平均负载为 35/43/41,如果平均负载值持续高于 CPU 核心数量,可能表示系统中有进程无法及时获得 CPU 资源,即存在 CPU 瓶颈。例如:当前系统CPU的数量为6,每次可以完成8个任务。当前负载了35,也就是有35个任务在等待运行,按计算 35 / 6 = 5.83 表示每颗CPU后面至少有5个任务在排队等候,说明CPU已经非常繁忙。一般来说,当平均负载值高于 CPU 核心数量的 80% 时,可能存在 CPU 瓶颈。但这只是一个经验性的参考值,实际上还需考虑不同的硬件设备和应用场景。

 

 

2. CPU利用率

  • CPU利用率是指CPU在一段时间内用于执行任务的时间比例或占用率。它表示了CPU在某个时间段内的工作量。CPU利用率通常使用百分比来表示,可以用来衡量CPU的繁忙程度和资源利用情况。
  • CPU利用率可以反映系统对CPU的需求程度和CPU的性能状况。当CPU利用率较高时,表示CPU正被系统或进程广泛使用,可能说明系统有较大的负载或存在CPU瓶颈。而当CPU利用率较低时,可能表示系统负载较轻,或者存在其他性能瓶颈导致CPU无法充分利用。

使用 top 命令查看CPU使用率( top 交互按 1 )

圈红表示各个CPU的详细信息,解释如下: 

us:用户空间占用 CPU 的百分比。表示在用户进程运行的时间中,CPU 所占用的时间比例。
sy:内核空间占用 CPU 的百分比。表示在内核进程运行的时间中,CPU 所占用的时间比例。
ni:用户进程以调整过的优先级运行所占用的 CPU 百分比。这是通过用户设置的 nice 值来调整的。
id:CPU 空闲的百分比。表示 CPU 在指定时间内处于空闲状态的时间比例。
wa:等待 I/O 完成所占用 CPU 的百分比。表示 CPU 在等待 I/O 操作完成时的时间比例。
hi:处理硬件中断所占用 CPU 的百分比。表示 CPU 在处理硬件中断的时间比例。
si:处理软件中断所占用 CPU 的百分比。表示 CPU 在处理软件中断的时间比例。
st:由于在虚拟环境中存在资源竞争,被虚拟化偷窃的 CPU 时间的百分比。只有在运行在虚拟机中时才会出现该字段。

 

1. 简单观察CPU利用率

  • 观察CPU利用率:关注整个系统的CPU利用率情况。如果CPU持续高于 70% 可能存在CPU性能瓶颈。需要特别注意单个进程或线程占用过高CPU,如有单个进程过度占用CPU,也可能导致性能问题。
  • 分析CPU占用率过高的进程:确定CPU使用率较高的进程或线程,可以通过PID来进一步分析它们的资源消耗情况。使用命令如 ps、pidstat 等来查看进程的资源占用情况,例如内存占用、I/O操作等,以确定是否存在其他性能问题。

2. 当Linux系统负载大但CPU利用率低时,这可能表示存在其他性能瓶颈

  1. I/O 瓶颈:系统中的磁盘、网络或其他I/O设备可能成为瓶颈,导致系统无法高效处理请求。这会导致负载的增加,但CPU利用率不高。通过iostat来分析系统的I/O性能,查看磁盘读写速度、I/O等待时间等。

  2. 内存瓶颈:系统中的内存资源可能不足,导致操作系统频繁进行内存交换(swap)操作。这会增加系统负载,但CPU利用率较低。通过freetop等命令查看系统内存的使用情况,特别关注交换空间的使用情况。

  3. 网络瓶颈:如果系统涉及网络通信,可能存在网络设备、带宽或网络堵塞等问题,导致系统负载增加。通过网络监控工具sartcpdump来观察网络流量、连接数、延迟等情况。

  4. 进程或应用程序问题:某个进程可能有错误、死锁或资源泄露等问题,导致系统负载增加但CPU利用率较低。此外,可能存在未优化的应用程序或算法,导致系统性能下降。

    可以使用工具如pstopstrace等来分析进程的资源占用情况,并排查可能的问题。

  5. 虚拟化问题:如果系统运行在虚拟机环境中,可能存在虚拟化层面的性能问题,如物理机资源不足、过度分配等。

3. 当Linux系统的单颗CPU利用率达到100%时,表示该CPU核心正在全力运行,没有剩余的计算能力可供使用。

  1. 确定高CPU利用率的进程:通过topps来查看系统中消耗CPU资源最多的进程。注意观察进程的PID(进程标识符),以及相应的CPU使用百分比。

  2. 了解进程的性质:对于消耗大量CPU的进程,确定其是系统进程还是用户进程。查看进程的命令行参数、打开的文件、相关的系统调用等,以确定进程的用途和可能的性能问题。

  3. 优化高CPU利用率的进程:对于用户进程,检查是否存在性能问题,例如无限循环、大量的计算量、不必要的资源消耗等。优化代码或调整进程的运行参数,以减少其CPU的使用。

  4. 调整优先级:如果是用户进程占用了过多的CPU资源,可以使用命令如renice来调整进程的优先级,将其调整为较低的优先级,以减少其对CPU的占用。

  5. 平衡负载:如果是多进程或多任务同时竞争CPU资源导致CPU饱和,可以考虑进行负载均衡。例如,使用工具如taskset来将进程绑定到不同的CPU核心,确保任务在多个核心上分布,以减少单个核心的负载。

 

 

3. 中断占用

  • 中断是CPU处理外部事件的一种方式,例如设备IO、定时器和网络传输等。当系统中有大量中断发生时,可能会导致CPU过于繁忙,出现瓶颈。

通过 sar -I SUM 命令查看中断统计

  • intr/s:每秒接收的中断数平均值

 

1. 观察中断统计次数

        观察中断次数是否频繁增加可以判断是否存在中断瓶颈。通常来说,每秒数百个到数千个中断可以被认为是相对频繁的。然而,这个阈值可以根据具体的硬件和应用程序需求而有所不同。一般来说,如果中断数目持续过高,并且导致系统性能下降,那么就应该考虑优化系统配置或调整应用程序来减少中断。

由于中断阈值并不是一个固定的数值,因为它取决于很多因素。比如:

  • 系统负载:如果系统的CPU利用率较高且持续增长,那么中断数目的增加可能是正常的,因为系统需要处理更多的任务。在这种情况下,中断数目的增加可能不会对CPU性能产生明显的负面影响。

  • 应用程序需求:特定应用程序的需求会影响中断处理的频率。某些应用程序可能需要更频繁的中断触发来处理实时数据或高速IO操作。

  • 硬件能力:硬件配置直接影响中断处理能力。高性能的CPU和IO设备可以处理更高的中断负载。

 

2. 中断处理时间:当中断处理时间较长时,可能意味着CPU正在处理大量中断而导致延迟增加。

  1. 比较中断处理时间和CPU利用率:观察中断处理时间与CPU利用率之间的关系。如果CPU利用率很高,但是中断处理时间较短,则可能表明CPU资源不足导致的性能瓶颈。相反,如果CPU利用率较低,但是中断处理时间较长,则可能表明中断处理本身存在问题,可能是驱动程序或硬件的限制。

  2. 检查硬件驱动程序和设备:确保使用的硬件驱动程序是最新的,并且与硬件设备兼容。过时的或不完善的驱动程序可能导致中断处理时间过长。

  3. 分析中断处理时间的分布:除了观察平均处理时间,还可以分析中断处理时间的分布。如果存在少数的中断处理时间异常长,可能是特定设备或驱动程序引起的问题,需要进一步调查和处理。

 

 

4. 上下文切换

  • 下文切换是指CPU从一个正在运行的进程或线程切换到另一个进程或线程的过程。每当操作系统决定将CPU的控制权从一个任务转移到另一个任务时,就会发生上下文切换。
  • 上下文是指进程或线程的运行状态和相关的信息,包括寄存器的内容、内存映射、打开文件等等。当操作系统切换到新的任务时,它需要保存当前任务的上下文并加载新任务的上下文,以确保进程或线程在切换后能够正确继续执行。

通过 sar -w 命令查看上下文切换次数

  • procs/s: 每秒创建的进程数
  • cswch/s: 每秒上下文切换的次数

        上下文切换对系统的性能有一些影响,因为它需要消耗CPU时间和资源来保存和恢复上下文信息。

        通常情况下,上下文切换数量的正常范围取决于系统。对于一个正常运行且无CPU瓶颈的系统,每秒数千次的上下文切换可能是可接受的。

        如果在观察上下文切换时发现值持续超过一万或更高,可能意味着系统存在CPU性能瓶颈。然而,这个阈值并不是绝对的。在某些情况下,高上下文切换数量可能并不一定表示性能瓶颈,特别是在运行大量并发任务或高负载的系统。这时需要结合其他性能指标和系统行为进行综合分析。

        此外,不同的系统和应用程序对上下文切换的敏感程度也有所不同。某些系统和应用程序可能对上下文切换更为敏感,要求更低的上下文切换数量,而另一些系统可能能够容忍更高的上下文切换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/732613.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Windows】Redis单机部署

下载redis 下载地址:Releases microsoftarchive/redis GitHub 1、下载后解压,在文件根目录下创建两个文件夹dbcache、logs 修改配置文件redis.windows.conf (1)配置redis地址: bind 127.0.0.1 (2&am…

M62429L音量控制IC驱动

前言 最近项目开发中,要控制AV端的音量,由于主控端的AV音量控制gpio被复用为其它功能口了,不得已增加一个ic去控制音量的输出,这里使用的是M62429L音量控制IC。 1.M62429音量ic概述 M62429L是一款串行数据控制的双声道电子音量控…

用图来理解group by、where、having、聚合函数使用

基本概念: 常用聚合函数:count、max、min、avg、sum,对一整体数据进行计算group by:用来分组where:条件查询having:分组后条件查询 疑问: group by配合聚合函数和where配合聚合函数有什么不同…

【数据结构】24王道考研笔记——串

四、串 串的定义 串(字符串)是由零个或多个字符组成的有限序列。 子串:串中任意个连续的字符组成的子序列主串:包含子串的串字符在主串中的位置:字符在串中的序号子串在主串中的位置:子串的第一个字符在…

Mysql8安装教程与配置

添加密码 出现报错 MySQL error 1042: Unable to connect to any of the specified MySQL hosts. Failed to connect to MySQL Server 8.0.23 after 10 attempts. Ended configuration step: Starting the server 使用WinR --> 运行 “services.msc” --> 打开service服…

Kubernatas Pod卷 - Pod镜像的升级和回滚 - 探针

目录 扩展: Pod创建的拓扑图: 提出的问题: Pod 卷的使用:Pod的数据持久化问题 配置 Pod 以使用卷进行存储 参考文档:配置 Pod 以使用卷进行存储 | Kubernetes 有状态应用和无状态应用: Pod 配置卷 1…

C++好难(8):C++中的继承

目录 1.继承的概念及定义 🍉继承的概念 🍉 继承的定义: 🍒格式定义: 🍒继承关系和访问限定符 🍒继承基类成员访问方式的变化 2.基类和派生类对象赋值转换 3.继承中的作用域: …

分隔链表(大小链表的连接)

题目: 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 输入:head [1,4,3,2,5,2], x 3 输出&…

前端Vue自定义加载loading组件 通过设置gif实现loading动画 可用于页面请求前loading

随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。 通过组件化开发,可以有效实现…

Altermanager安装和使用

1、Altermanager使用 1.1 什么是Alertmanager Alertmanager 与 Prometheus 是相互分离的两个组件,Prometheus 服务器根据报警规则将警报发送给 Alertmanager,然后 Alertmanager 将 silencing、inhibition、aggregation 等消息通过电子邮件、dingtalk …

【每日算法】【219. 存在重复元素 II】

☀️博客主页:CSDN博客主页 💨本文由 我是小狼君 原创,首发于 CSDN💢 🔥学习专栏推荐:面试汇总 ❗️游戏框架专栏推荐:游戏实用框架专栏 ⛅️点赞 👍 收藏 ⭐留言 📝&…

LabVIEW-Solidworks联合仿真

介绍 NI Softmotion介绍 LabVIEW NI SoftMotion 采用高级功能块API (应用程序接口) 便于编写运动程序,该功能块API基于由PLCopen 定义的 Motion Control Library 。SoftMotion 包括用于直线、弧线和轮廓运动的功能块及用于进行电子传动、电子凸轮等高级运行的功能块…

Oracle 的删除

前言 最近在工作中需要将一台电脑上的 Oracle ,删除 Oracle 与删除 MySQL 不太一样,删除 Oracle 还需要删除注册表中的内容,不然重新安装的时候会报错。 关闭服务 win r 开启运行窗口,输入 services.msc 打开服务列表。 将 O…

【Redis故障排查】「连接失败问题排查和解决」带你深入分析一下Redis阻塞原因以及问题排查方案指南

Redis阻塞原因以及问题排查 尽管我们在日常工作中经常使用Redis作为数据库的缓存,以大大减轻数据库压力并提升用户体验,但Redis也可能出现阻塞情况,导致整个系统变慢,进而影响用户体验。 因此,在面对Redis阻塞的情况…

傅里叶变换通俗理解,附python代码

傅里叶变换可以简单理解为用一系列三角函数去拟合一个目标函数。为什么可以用三角函数拟合?因为三角函数 是一组正交基。 先来回顾一下正交的概念,在二维平面坐标系中,与这两个单位向量,正交(内积为0,相互…

单机模型并行最佳实践

单机模型并行最佳实践 模型并行在分布式训练技术中被广泛使用。 先前的帖子已经解释了如何使用DataParallel在多个 GPU 上训练神经网络; 此功能将相同的模型复制到所有 GPU,其中每个 GPU 消耗输入数据的不同分区。 尽管它可以极大地加快训练过程&#x…

MySQL的基本操作及实用示例(面试真题老实用了)

一、MySQL基本操作 常用语句 MySQL是一个常用的关系型数据库管理系统,可以用于存储和管理数据。下面是MySQL的一些基本操作: 1. 连接到MySQL服务器: mysql -u username -p 其中,username是你的用户名,执行该命令后会…

【软件分析/静态分析】chapter5 课程07 过程间分析(Interprocedural Analysis)

🔗 课程链接:李樾老师和谭天老师的: 南京大学《软件分析》课程07(Interprocedural Analysis)_哔哩哔哩_bilibili 目录 第五章 过程间分析 5.1 为什么需要过程间分析 5.2 Call Graph 5.2.1 调用图的概念 5.2.2 调…

2023 年 GitHub 上最火的 Java 面试宝典正式上线

笔记特点:条理清晰,含图像化表示更加易懂。 内容概要:包括 Java 集合、JVM、多线程、并发编程、设计模式、Spring 全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Ne…

Vue实现拖拽鼠标圈选、划区域、框选组件sgRectSelect:矩形区域选中checkbox,并回调相关选中、取消选中的操作

边框线虚线动画效果请参阅边框虚线滚动动画特效_虚线滚动效果_你挚爱的强哥的博客-CSDN博客【代码】边框虚线滚动动画特效。_虚线滚动效果https://blog.csdn.net/qq_37860634/article/details/130507289 碰撞检测原理请前往 原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞…