Linux 下查看 CPU 使用率

目录

  • 一、什么是 CPU 使用率
  • 二、查看 CPU 利用率
    • 1、使用 top 查看
    • 2、用 pidstat 查看
    • 3、用 ps 查看
    • 4、用 htop 查看
    • 5、用 nmon 查看
    • 6、用 atop 查看
    • 7、用 glances 查看
    • 8、用 vmstat 查看
    • 9、用 sar 查看
    • 10、dstat
    • 11、iostat
  • 三、总结


CPU 使用率是最直观和最常用的系统性能指标,更是我们在排查性能问题时,通常会关注的第一个指标。

一、什么是 CPU 使用率

Linux 作为一个多任务操作系统,将每个 CPU 的时间划分为很短的时间片,再通过调度器轮流分配给各个任务使用,因此造成多任务同时运行的错觉。

为了维护 CPU 时间, Linux 通过事先定义的节拍率(内核中表示为 HZ),触发时间中断,并使用全局变量 Jiffies 记录了开机以来的节拍数。每发生一次时间中断,Jiffies 的值就加 1。节拍率 HZ 是内核的可配选项,可以设置为 100、250、1000 等。不同的系统可能设置不同数值。

Linux 通过 /proc 虚拟文件系统,向用户空间提供了系统内部状态的信息,而 /proc/stat 提供的就是系统的 CPU 和任务统计信息。比方说,如果你只关注 CPU 的话,可以执行下面的命令:

第一列表示的是 CPU 编号,如 cpu0、cpu1 ,而第一行没有编号的 cpu ,表示的是所有 CPU 的累加结果。其他列则表示不同场景下 CPU 的累加节拍数,它的单位是 USER_HZ,也就是 10 ms(1/100 秒),所以这其实就是不同场景下的 CPU 时间。下面,依次为各列的含义:

  • user(通常缩写为 us),代表用户态 CPU 时间。注意,它不包括下面的 nice时间,但包括了 guest 时间。
  • nice(通常缩写为 ni),代表低优先级用户态 CPU 时间,也就是进程的 nice 值被调整为 1-19 之间时的 CPU 时间。这里注意,nice 可取值范围是 -20 到 19,数值越大,优先级反而越低
  • system(通常缩写为 sys),代表内核态 CPU 时间。
  • idle(通常缩写为 id),代表空闲时间。注意,它不包括等待 I/O 的时间(iowait)。
  • iowait(通常缩写为 wa),代表等待 I/O 的 CPU 时间。
  • irq(通常缩写为 hi),代表处理硬中断的 CPU 时间。
  • softirq(通常缩写为 si),代表处理软中断的 CPU 时间。
  • steal(通常缩写为 st),代表当系统运行在虚拟机中的时候,被其他虚拟机占用的 CPU 时间。
  • guest(通常缩写为 guest),代表通过虚拟化运行其他操作系统的时间,也就是运行虚拟机的 CPU 时间。
  • guest_nice(通常缩写为 gnice),代表以低优先级运行虚拟机的时间。

而我们通常所说的 CPU 使用率,就是除了空闲时间外的其他时间占总 CPU 时间的百分比,用公式来表示就是:

C P U 使用率 = 1 − 空闲时间 总 C P U 时间 CPU 使用率 = 1 - \frac{空闲时间}{总 CPU时间} CPU使用率=1CPU时间空闲时间

但直接用 /proc/stat 的数据这是开机以来的节拍数累加值,所以直接算出来的,是开机以来的平均 CPU 使用率,一般没有什么参考价值。

事实上,为了计算 CPU 使用率,性能工具一般都会取间隔一段时间(比如 1 秒)的两次值,作差后,再计算出这段时间内的平均 CPU 使用率,即:

平均 C P U 使用率 = 1 − 空闲时 间 n e w − 空闲时 间 o l d 总 C P U 时 间 n e w − 总 C P U 时 间 o l d 平均 CPU 使用率 = 1 - \frac{空闲时间_{new} - 空闲时间_{old}}{总 CPU时间_{new} - 总 CPU时间_{old}} 平均CPU使用率=1CPUnewCPUold空闲时new空闲时old

跟系统的指标类似,Linux 也给每个进程提供了运行情况的统计信息,也就是 /proc/[pid]/stat。不过,这个文件包含的数据就比较丰富了,总共有 52 列的数据,这里不再赘述。

二、查看 CPU 利用率

1、使用 top 查看

top 是一个命令行工具安装在任何 Linux 系统上,它主要提供由 Linux 内核管理的所有当前运行任务的动态实时统计汇总。它监视 Linux 系统上进程、CPU 和内存的完整利用率。

$ top

结果如下:

  • us: 花费在用户空间上的 CPU 时间百分比 (running user-spawned processes)。
  • sy: 花费在内核空间的 CPU 时间百分比(running system processes)。
  • ni: 运行用户定义优先级的进程所花费的 CPU 时间百分比(aspecified nice value)。
  • id: CPU 空闲时间的百分比。
  • wa: 用于等待硬件 I/O 的 CPU 时间百分比。例如:等待硬盘读完数据。
  • hi: 用于处理硬件中断的 CPU 时间百分比。例如:网卡(或任何硬件)中断 CPU 以通知它有新数据到达。
  • si: 用于处理软件中断的 CPU 时间百分比。例如:高优先级业务导致 CPU 中断。
  • st: 从虚拟机窃取的 CPU 时间百分比。例如:为了处理物理机的工作负载,需要从虚拟机“窃取”资源的 CPU

可以非常清楚地看到 CPU 使用率。不过,要注意的是,CPU 默认显示的是所有 CPU 的平均值。这时候,按下数字 1 就可以看到每个 CPU 的使用率了:

继续往下看,空白行之后是进程的实时信息,每个进程都有一个 %CPU 列,表示进程的 CPU 使用率。它是用户态和内核态 CPU 使用率的总和,包括进程用户空间使用的 CPU、通过系统调用执行的内核空间 CPU 、以及在就绪队列等待运行的 CPU。在虚拟化环境中,它还包括了运行虚拟机占用的CPU。

可以发现,top 并没有细分进程的用户态 CPU 和内核态 CPU。

2、用 pidstat 查看

pidstat 是一个专门分析每个进程 CPU 使用情况的工具。比如,下面的 pidstat 命令,就间隔 1 秒展示了进程的 5 组 CPU 使用率,包含:

  • 用户态CPU使用率(%usr);
  • 内核态CPU 使用率(%system)
  • 运行虚拟机CPU使用率(%guest)
  • 等待 CPU使用率(%wait);
  • 总的CPU使用率(%CPU)

最后的 Average 部分,还计算了5组数据的平均值。

3、用 ps 查看

ps 命令可用于确定哪个进程占用了 CPU。

$ ps -eo pid,%cpu,cmd --sort=-%cpu

如果要仅查看正在运行的进程,可以使用以下命令:

$ ps -eo pid,%cpu,cmd --sort=-%cpu | grep -v PID

这个命令将过滤掉标题行。

如果要仅显示前几个进程,可以将输出通过head命令进行截取。例如,要显示前 5 个进程,可以使用以下命令:

$ ps -eo pid,%cpu,cmd --sort=-%cpu | grep -v PID | head -n 5

在这里插入图片描述

4、用 htop 查看

htop 是一个交互式的进程查看器和系统监控工具,它提供了比传统的 top 命令更多的功能和更友好的界面。它提供了 CPU 和系统资源利用率的详细摘要。可以垂直滚动或水平滚动以显示更多详细信息。它还在命令列下提供进程路径。

$ htop

在 CPU 状态区域主要显示 CPU 使用情况,htop 还为将不同颜色来区分是使用情况:

  • 蓝色的表示 low-prority(低优先级)使用
  • 绿色的表示 normal(标准)使用情况
  • 红色的表示 kernel(内核)使用情况
  • 青色的表示 virtuality(虚拟性)使用情况

5、用 nmon 查看

nmon 是 Linux 系统的一个性能监控工具。它用于实时监测系统的 CPU、内存、磁盘、网络等资源的使用情况,帮助管理员分析系统性能并做出优化调整。

nmon 工具以文字界面的形式展示监控结果,提供了丰富的信息和统计数据,可以实时查看系统的运行状况。它的输出格式清晰简洁,容易理解和分析。

使用 nmon 命令:

$ nmon

在这里插入图片描述

然后按 t 查看利用更多资源的进程:

按下 c 键可以来查看 CPU 的使用率:

6、用 atop 查看

atop 是在 Linux 系统的一个高级性能监控工具。与 nmon 类似,atop 也用于实时监测系统的各种资源的使用情况,但它提供了更为详细和全面的性能数据,让管理员更深入地了解系统运行情况。

$ atop

也可以使用以下命令把 CPU 使用率记录到文件中,下次直接读取文件查看 CPU 利用率。写入文件使用“-w 文件名”,读出文件使用“-r 文件名”:

$ root@projectsauron:~# atop -w test
^C
$ root@projectsauron:~# atop -r test

7、用 glances 查看

glances 是一种跨平台的实时系统监控工具,该工具是用python编写的,并使用库程序详细提供了对 CPU、内存、磁盘、网络和进程等系统资源的监测信息。glances 以直观和交互的方式呈现系统监控数据,并提供了丰富的选项和功能,方便用户进行系统性能的实时监控和分析。

在这里插入图片描述

8、用 vmstat 查看

vmstatvirtual memory statistics)是一个在 Linux 系统上用于监视虚拟内存、进程、CPU 和 IO 性能的命令行工具。

$ vmstat

在这里插入图片描述

各个字段你含义如下:

  • 进程 procs
    • r:在运行队列中等待的进程数 。
    • b:在等待io的进程数 。
  • 内存 memoy
    • swpd:现时可用的交换内存(单位KB)。
    • free:空闲的内存(单位KB)。
    • buff: 缓冲去中的内存数(单位:KB)。
    • cache:被用来做为高速缓存的内存数(单位:KB)。
  • swap 交换页面
    • si: 从磁盘交换到内存的交换页数量,单位:KB/秒。
    • so: 从内存交换到磁盘的交换页数量,单位:KB/秒。
  • io 块设备:
    • bi: 发送到块设备的块数,单位:块/秒。
    • bo: 从块设备接收到的块数,单位:块/秒。
  • system 系统:
    • in: 每秒的中断数,包括时钟中断。
    • cs: 每秒的环境(上下文)转换次数。
  • cpu 中央处理器:
    • cs:用户进程使用的时间 。以百分比表示。
    • sy:系统进程使用的时间。 以百分比表示。
    • id:中央处理器的空闲时间 。以百分比表示。

如果想使用 vmstat 命令以 2 秒的间隔监视系统资源,间隔 5 次。在这种情况下,可以使用以下命令:

$ vmstat 2 5

在这里插入图片描述

9、用 sar 查看

sarSystem Activity Reporter)是一个在 Linux 系统上用于收集、报告和存档系统活动数据的命令行工具。

使用 sar 命令,可以按特定时间间隔监视 CPU 使用率:

$ sar 3

也可以通过如下来显示每隔 3 秒 10 条后的运行数据。

$ sar 3 10

10、dstat

dstat 是一个在 Linux 系统上使用的用于监控系统资源使用情况的命令。它可以提供关于 CPU、内存、磁盘、网络等方面的实时数据,并以可读性高的格式输出。该工具结合了 vmstatiostatifstatnetstat 以及更多的信息。并且支持输出 CSV 格式报表,并能导入到 Gnumeric 和 Excel 以生成图形

$ dstat

每秒 CPU 使用率情况获取:

$ dstat -c

最占 CPU 的进程获取:

$ dstat --top-cpu  

在这里插入图片描述

11、iostat

这个命令主要用来查看 IO 使用情况,也可以来查看 CPU,不如上述命令常用。

三、总结

Linux 系统上有各种可用的工具和命令来监视 CPU 使用率和系统资源利用率,那么多命令工具可根据实际情况,直观可视化的 nmongalances 比较方便查看结果。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT生成.exe文件无法在未安装QT的电脑上运行的解决办法

在没有安装qt的电脑上运行qt生成的exe文件,提示: The application failed to start because no Qt platform plugin could be initialized 在网上找了很多办法,我尝试了 手动: 1、修改环境变量,2,添加pla…

C#开发编程软件下载安装

1、Visual Studio 2022社区版下载 2、开始安装 3、安装进行中 。。。。

【linux】curl命令用法

curl命令认识 curl命令其实在平常工作中就已经在使用了,但是一直没有系统看过,就在这记录下,以后要用的话,可以在这儿查阅。 curl命令写的更清楚一点其实是cURL(client url,客户端URL或者command url命令…

QT(2.0)

1.常用控件的介绍 1.1 TextEdit QTextEdit表示多行输入框,也是一个富文本&markdown编辑器,并且能在内容超出编辑框范围时自动提供滚动条。 核心属性 属性 说明 markdown 输入框内持有的内容,支持markdown格式,能够自动的…

OpenGL实现3D游戏编程【连载3】——3D空间模型光照初步

1、本节实现的内容 上一节课,我们建立了简单的坐标系,同时也显示了一个正方体,但正方体的颜色为纯红色,好像一个平面物体一样,我们这节课就可以加一些光照,并创建更多的模型,使这些物体变得更加…

显示学习5(基于树莓派Pico) -- 彩色LCD的驱动

一 环境搭建 使用的ST7715S驱动的1.8寸彩色屏,主控是我们熟悉的树莓派Pico。软件环境是micropython。连接是屏幕直接从Pico取3.3V的供电,然后总线用的SPI。 ST7735 PinPico PinVCC3.3VGNDGNDSCL (SCK)GP10SDA (MOSI)GP11RES (RST)GP17DC(A0…

【HarmonyOS NEXT星河版开发学习】小型测试案例01-今日头条置顶练习

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面 ​ 前言 本系列可能是博客首发,鸿蒙开发星河版是一个全新的版本,由于参考视频较少鸿蒙开发不被重视导致csdn上面并没有全套的学习路线,…

第20周:Pytorch文本分类入门

目录 前言 一、前期准备 1.1 环境安装导入包 1.2 加载数据 1.3 构建词典 1.4 生成数据批次和迭代器 二、准备模型 2.1 定义模型 2.2 定义示例 2.3 定义训练函数与评估函数 三、训练模型 3.1 拆分数据集并运行模型 3.2 使用测试数据集评估模型 总结 前言 &#x1…

【JUC】03-CompletableFuture使用

1. CompletableFuture CompletableFuture可以进行回调通知、创建异步任务、多个任务前后依赖可以组合处理、对计算速度选最快。  CompletableFuture提供了一种类似于观察者模式的通知方式,可以在任务完成后通知监听方。 CompletableFuture实例化用CompletableFutur…

【弱网】模拟弱网环境

fiddler工具 调整上传/下载速率 打开fiddler脚本工具,在上方状态栏选择 Rules -> Customize Rules…,打开ScriptEditor编辑器 修改上传/下载速率,实现模拟指定弱网环境 计算公示:[1/(上或下行速率/8)] x 1000 网络上行下载2G2…

【Hive】学习笔记

Hive学习笔记 【一】Hive入门【1】什么是Hive【2】Hive的优缺点(1)优点(2)缺点 【3】Hive架构原理(1)用户接口:Client(2)元数据:Metastore(3&…

相机标定——小孔成像、相机模型与坐标系

小孔成像 用一个带有小孔的板遮挡在墙体与物之间,墙体上就会形成物的倒影,我们把这样的现象叫小孔成像。 用一个带有小孔的板遮挡在墙体与物之间,墙体上就会形成物的倒影,我们把这样的现象叫小孔成像。前后移动中间的板&#xff…

Docker 常规安装简介

Docker常规安装简介 欢迎关注我的B站:https://space.bilibili.com/379384819 1. 安装mysql 1.1 docker hub上面查找mysql镜像 网址: https://hub.docker.com/_/mysql 1.2 从docker hub上(阿里云加速器)拉取mysql镜像到本地标…

Redis远程字典服务器(0)——分布式系统

目录 一,关于Redis 二,分布式系统 2.1 关于分布式 2.2 理解数据库分离 2.3 理解负载均衡 2.4 数据库读写分离 2.5 引入缓存 2.6 数据库分库分表 2.7 微服务 四,补充 五,总结 一,关于Redis MySQL是在磁盘中存…

分类预测 | Matlab实现PSO-XGBoost粒子群算法优化XGBoost的多特征分类预测

分类预测 | Matlab实现PSO-XGBoost粒子群算法优化XGBoost的多特征分类预测 目录 分类预测 | Matlab实现PSO-XGBoost粒子群算法优化XGBoost的多特征分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现PSO-XGBoost粒子群算法优化XGBoost的多特征分类预测&a…

英特尔:“芯”痛巨头

从全球芯片巨头到“芯”痛巨头, 英特尔 到底经历了什么? 今天券商中国说英特尔在QDII基金上这么多年,一直就没能进入主流持仓中,最后一只试探性持仓英特尔的QDII也已在今年3月末砍仓了, 这一砍还让这只QDII完美躲过…

医得快医疗服务交易服务平台/基于微信小程序的药品销售系统

获取源码联系方式请查看文章结尾🍅 摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而…

【中间件】Redis从入门到精通-黑马点评综合实战

文章目录 一:Redis基础1.Redis是什么2.初识Redis3.Redis的数据结构A.通用命令B.String类型C.Key的层级格式D.Hash类型E.List类型F.Set类型G.SortedSet类型 二:Redis的Java客户端1.JedisA.引入依赖B.建立连接C.测试JedisD.释放资源 2.Jedis连接池3.Spring…

如何通过GD32 MCU内部ADC参考电压通道提高采样精度?

ADC采样精度受很多因素影响,比如电源波动、参考电压波动、输入信号波动等,GD32 MCU内部提供了一个参考电压通道,理论上可以优化由于电源和参考电压较大波动引入的采样误差。 如下图所示,GD32F303 ADC内部17通道为VREFINT参考电压…

密码学基础-为什么使用真随机数(True Random Number Generators)

密码学基础-为什么使用真随机数(True Random Number Generators) 概述 随机的意义很重要,就像你的银行密码如果是亲朋好友的生日,结婚纪念日(可预测的),那么就容易被人测试出来;而…