【Linux系列】Linux/Unix 系统中的 CPU 使用率

article/2025/6/21 14:09:51

csdn

博客目录

    • 多核处理器时代的 CPU 使用率计算
      • 为什么要这样设计?
    • 解读实际案例:268.76%的 CPU 使用率
      • 性能分析的意义
    • 相关工具与监控实践
      • 1. top 命令
      • 2. htop 命令
      • 3. mpstat 命令
      • 4. sar 命令
    • 实际应用场景
      • 容量规划
      • 性能调优
      • 故障诊断
    • 深入理解:CPU 使用率的计算原理
    • 高级话题:CPU 超线程的影响
    • 监控最佳实践
    • 容器化环境中的特殊考虑

在 Linux 和 Unix 系统监控中,一个经常让初学者困惑的现象是 CPU 使用率可以显示超过 100%的数值。这种现象与操作系统的多核处理器管理和性能监控机制密切相关。

多核处理器时代的 CPU 使用率计算

传统单核 CPU 时代,CPU 使用率是一个直观的 0-100%的数值,表示处理器资源的占用情况。然而,随着多核处理器成为主流,这种简单的表示方式已经无法准确反映系统的真实负载情况。

现代操作系统采用了一种"聚合"的方式来显示 CPU 使用率——将每个核心的使用率相加。这意味着在一个 4 核系统上,如果所有核心都完全占用,系统会显示 400%的 CPU 使用率;在 8 核系统上,则可能显示 800%。这种表示方法虽然初看违反直觉,但实际上提供了更丰富的信息。

为什么要这样设计?

这种设计主要有三个优点:

  1. 直观显示系统整体负载情况
  2. 便于管理员快速判断是否有核心闲置
  3. 与任务调度器的视角保持一致

在这里插入图片描述

解读实际案例:268.76%的 CPU 使用率

以一个 4 核服务器上显示的 268.76% CPU 使用率为例,我们可以进行如下分析:

  1. 原始数据:268.76%
  2. 核心数量:4
  3. 实际利用率:268.76 / 4 ≈ 67.19%

这意味着整个服务器的 CPU 资源中,大约 67.19%正在被使用。具体来说,可能有以下几种情况:

  • 三个核心运行在约 75%负载,一个核心运行在约 40%负载
  • 两个核心完全占用(100%),一个核心运行在约 50%负载,一个核心运行在约 35%负载
  • 其他各种组合,总和约为 268.76%

性能分析的意义

这种细化的数据对于性能调优至关重要。如果系统显示接近 400%的负载(对于 4 核系统),说明所有核心都接近满负荷运转,系统可能面临性能瓶颈。而如本例中的 268.76%,则表明系统还有一定的处理能力余量。

相关工具与监控实践

Linux 系统提供了多种工具来监控 CPU 使用率,每种工具显示信息的方式略有不同:

1. top 命令

在交互模式下,top 会显示总体 CPU 使用率以及各个核心的使用情况。新版 top 通常会显示超过 100%的聚合值。

2. htop 命令

htop 提供了更直观的彩色显示,可以同时看到每个核心的使用情况和总体聚合值。

3. mpstat 命令

属于 sysstat 包,专门用于监控多核 CPU 的使用情况,可以提供每个核心的详细统计信息。

4. sar 命令

系统活动报告工具,可以记录历史 CPU 使用情况,对于分析性能趋势非常有用。

实际应用场景

容量规划

通过长期监控 CPU 使用率,管理员可以:

  1. 识别使用高峰和低谷
  2. 预测何时需要扩展硬件资源
  3. 优化任务调度,平衡负载

性能调优

异常的 CPU 使用模式可能指示:

  1. 存在低效的应用程序或配置
  2. 出现资源竞争或锁争用
  3. 需要调整进程亲和性(affinity)

故障诊断

突然的 CPU 使用率飙升可能表明:

  1. 应用程序出现异常
  2. 系统遭受攻击
  3. 硬件出现故障

深入理解:CPU 使用率的计算原理

操作系统通过定期采样来计算 CPU 使用率。基本原理是:

  1. 在每个时间间隔(通常为 100ms 或 1s)检查 CPU 的状态
  2. 记录 CPU 在用户态、内核态、空闲等不同状态的时间
  3. 通过对比连续两个时间点的状态变化计算使用率

对于多核系统,这个过程会并行发生在每个核心上,然后汇总结果。

高级话题:CPU 超线程的影响

现代 CPU 的超线程技术(一个物理核心表现为多个逻辑核心)使得 CPU 使用率的解读更加复杂。一般来说:

  • 操作系统会将每个逻辑核心视为独立单元
  • 但由于物理资源是共享的,两个逻辑核心都显示 100%并不等同于真正的 200%负载
  • 实际性能提升通常在 15-30%之间,而非 100%

监控最佳实践

  1. 结合多个指标:不要只看 CPU 使用率,要结合内存、IO、网络等指标一起分析
  2. 建立基线:了解系统的正常使用模式,才能识别异常
  3. 设置警报阈值:根据核心数量设置合理的警报阈值(如 4 核系统设置 350%)
  4. 长期趋势分析:识别周期性模式和长期变化趋势

容器化环境中的特殊考虑

在 Docker、Kubernetes 等容器化环境中,CPU 使用率的监控更加复杂:

  1. 容器可能被限制使用特定核心或部分 CPU 资源
  2. 监控工具需要能够区分宿主机和容器的 CPU 使用情况
  3. CPU 配额(cgroups)会影响使用率的计算方式

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img


http://www.hkcw.cn/article/qKBbvqQNVe.shtml

相关文章

内存管理 : 04段页结合的实际内存管理

一、课程核心主题引入 这一讲,我要给大家讲的是真正的内存管理,也就是段和页结合在一起的内存管理方式。之前提到过,我们先学习了分段管理内存的工作原理,知道操作系统采用分段的方式,让用户程序能以分段的结构进行编…

MCP Python技术实践

目录 1. 引言篇 1.1 什么是MCP(Model Context Protocol) 1.2 MCP的核心设计理念​ 1.3 MCP的技术背景 1.3 学习目标与内容概览 2. 基础理论篇 2.1 MCP协议架构详解 2.2 MCP消息格式与通信机制 2.3 MCP核心概念深入 3. 环境搭建篇 3.1 开发环境…

《数据结构初阶》【番外篇:二路归并的外排史诗】

【番外篇:多路归并的外排史诗】目录 前言:---------------介绍---------------一、实际情景二、外部排序什么是外部排序? 三、多路归并排序什么是多路归并排序? ---------------实现---------------四、文件归并文件二路归并排序思…

【JavaEE】多线程

5.线程启动(statrt方法) start方法内部,会调用系统api来在系统内核中创建出线程,创建完线程后会自动调用run方法。 而run方法,就只是描述这个线程要执行的任务。 start 和 run 得区别(经典面试题&#xf…

leetcode hot100刷题日记——31.二叉树的直径

二叉树直径详解 题目描述对直径的理解解答:dfs小TIPS 题目描述 对直径的理解 实际上,二叉树的任意一条路径均可以被看作由某个节点为起点,从其左儿子和右儿子向下遍历的路径拼接得到。 那我们找二叉树的直径(最大路径&#xff09…

C++ —— B/类与对象(下)

🌈个人主页:慢了半拍 🔥 创作专栏:《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》|《史上最强C讲解》 🏆我的格言:一切只是时间问题。 ​ 目录 一、再谈构造函数 1…

Python贷款计算器:等额本息与等额本金还款方案详解

Python贷款计算器:等额本息与等额本金还款方案详解 一、摘要二、整体架构流程1. 输入处理层2. 核心计算层3. 结果输出层三、具体技术细节1. 等额本息实现解析2. 等额本金实现解析3. 输出格式化技术四、运行1.等额本息2.等额本金五、结论附:完整代码一、摘要 本文介绍一款基于…

【Python专栏】Python中的浮点数类型

Python中的浮点数类型是有范围的,我们如何知道浮点数的范围呢?我们可以使用如下的方法来确定我们的浮点数的上下限。 Import sys Print(sys.float_info) 在编程语言中,如果我们计算的是浮点数计算,我们都会碰到计算精度的问题。原因是因为Double

【判断数字递增】2021-12-19

缘由用C/C实现数字递增问题?-编程语言-CSDN问答 给定一个正整数 n,请判断 n 的所有数位上的值是否从左到右是严格递增的。   例如:1589 是严格递增的。   再如:1336 不是严格递增的,中间有相同的 3。   再如&am…

计算机网络之路由表更新

1.解题思路 对新接收到的路由表进行更新,全部"距离"1,且"下一跳路由器"都写成发送方路由器的名称。 开始对比新表和原来的路由表 1.看目的网络 如果是新的目的网络,则直接把对应的各项信息填入表中;如果是相同…

前端学习(7)—— HTML + CSS实现博客系统页面

目录 一,效果展示 二,实现博客列表页 2.1 实现导航栏 2.2 实现个人信息 2.3 实现博客列表 三,实现博客正文页 3.2 复用 3.4 实现博客正文 四,实现博客登录页 4.1 版心 4.2 登录框 五,实现博客编辑页 5.1 …

使用 HTML + JavaScript 实现一个日历任务管理系统

在现代快节奏的生活中,有效的时间管理变得越来越重要。本项目是一个基于 HTML 和 JavaScript 开发的日历任务管理系统,旨在为用户提供一个直观、便捷的时间管理工具。系统不仅能够清晰地展示当月日期,还支持事件的添加、编辑和删除操作&#…

最卸载器——Geek Uninstaller 使用指南

Geek Uninstaller 是一款轻量级的第三方卸载工具,专为 Windows 系统设计,提供比系统默认卸载器更彻底的应用清除能力。它体积小、绿色免安装,使用起来简单直观,但功能却不含糊。 一、为什么要用 Geek Uninstaller? Wi…

在QT中,利用charts库绘制FFT图形

第1章 添加charts库 1.1 .pro工程添加chart库 1.1.1 在.pro工程里面添加charts库 1.1.2 在需要使用的地方添加这两个库函数,顺序一点不要搞错,先添加.pro,否则编译器会找不到这两个.h文件。 第2章 Charts关键绘图函数 2.1 QChart 类 QChart 是…

5G-A:开启通信与行业变革的新时代

最近,不少细心的用户发现手机信号标识悄然发生了变化,从熟悉的 “5G” 变成了 “5G-A”。这一小小的改变,却蕴含着通信技术领域的重大升级,预示着一个全新的通信时代正在向我们走来。今天,就让我们深入了解一下 5G-A&a…

web安全开发,在线%机器学习异常流量检测系统%开发demo

框架:html,css,jquery,echart,python,flask,sklearn,uniapp,apk,kdd和nsl,mysql数据库。 经验心得 这是一个响应式的 H5 页面,适用于手机端和电脑端,平板,各种小程序。本来想vxxx小程序和AndroidStudo写两个但是工作量太多了加上也不是商用&…

每日算法-250531

每日算法学习记录 - 250531 今天完成了两道 LeetCode 题目,主要用到了前缀和的思想。记录如下: 1. 2559. 统计范围内的元音字符串数 题目 思路 前缀和 解题过程 我们可以先预处理出一个前缀和数组 nums,其中 nums[i] 表示 words 数组中从下…

CTFHub-RCE eval执行

观察源代码 我们可以发现源代码是request请求,所以我们可以通过GET或者POST请求,利用cmd参数进行命令执行 判断是Windows还是Linux 用GET请求 /?cmdsystem(ipconfig); 无回显 说明不是Windows系统 /?cmdsystem(ifconfig); 可以发现有回显&…

MCP架构深度解析:从基础原理到核心设计

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 持续学习,不断…

MySql(九)

目录 条件查询 1&#xff09;准备一张表 2&#xff09;插入数据 3&#xff09;条件查询格式 1---比较运算符 >大于 2---比较运算符 < 小于 3---比较运算符 > 大于等于 4---比较运算符 < 小于等于 5---比较运算符 ! 不等于 6---比较运算符 <> 不等于 7---比较…