Linux性能分析之-CPU篇

news2024/9/21 12:37:38

  开发车载软件app,除了常用Android操作系统外,还可能是基于Linux系统开发。对于web应用基本也都部署在Linux系统上,所以,进行系统性能分析,很大情况下都是对Linux系统进行性能分析。此篇博客将重点介绍如果收集CPU相关指标以及对这些指标进行分析。

 Linux系统CPU收集分析哪些指标数据

  在对Linux系统进行性能指标收集和分析时,通常需要观察平均负载,cpu使用率,上下文切换次数,中断次数指标。下图从这四个方面进行了整理总结,给出了收集这些指标的常用命令,以及一些核心分析思路观点。具体如下图所示:

常用命令工具使用介绍

  前面的图只是概括性的说明使用哪些命令收集性能指标数据,接下来会重点介绍其中的一些命令使用。

uptime命令:查看cpu负载信息,这个命令非常简单。

mpstat命令:是一个用于报告 CPU 使用情况的 Linux 命令。

  • -P:指定要显示的 CPU,-P ALL 显示所有 CPU,-P 0 显示特定 CPU 0 的信息。
  • -I:显示中断统计信息。-I SUM 显示中断总数,-I CPU 显示每个 CPU 的中断信息。

如下图所示:mpstat命令除显示cpu使用情况外,还显示了硬中断和软中断数量。

top命令也是常用的查询cpu指标信息的命令,和top命令相比,mpstat可以显示中断数据信息。top命令中还显示了zombie进程数量,sleeping进程数量。另外,还显示了不同进程的各个指标数据,其中S列表示状态:不同状态值含义如下所示,如果某个状态的进程数量很大,就需要关注分析了。

R (Running):进程正在运行或者在运行队列中等待 CPU 时间。
S (Sleeping):进程处于休眠状态,等待某个事件(如 I/O 操作)完成。
D (Uninterruptible Sleep):进程在不可中断的睡眠状态中,通常是等待 I/O 操作。这种状态下,进程无法被信号打断。
T (Stopped):进程已被停止,通常是由于接收到 SIGSTOP 信号。
Z (Zombie):僵尸进程,已经完成执行但仍在进程表中保留记录,等待父进程读取其退出状态。
I (Idle):表示进程处于空闲状态,通常与线程有关。

pidstat命令:是一个强大的工具,用于收集和显示关于系统上各个进程的统计信息。它可以提供 CPU 使用率、内存使用率、I/O 使用情况等多种性能指标。
-u:显示每个进程的 CPU 使用情况。
-r:显示每个进程的内存使用情况。
-d:显示每个进程的 I/O 使用情况。
-p:指定进程 ID(PID)进行监控。-p 1234 监控 PID 为1234的进程,-p ALL 监控所有进程。
-t:显示线程的统计信息。
-w:显示每个进程的上下文任务切换情况。

如下图所示:

  在实际项目,可以先通过top或者mpstat,vmstat等命令查看总体情况后,在使用pidstat命令查看某个具体进程的资源占用情况,进行下一步分析。

vmstat命令:该命令比较简单,通过该命令可以查看cs上下文切换次数,in:中断数量。

perf命令:

//ubuntu中安装perf工具
sudo apt update
sudo apt install linux-tools-common linux-tools-generic linux-tools-$(uname -r)

sudo perf record -a -g -- sleep 10 (--后面是要执行的命令)
sudo perf report

-a:全系统模式(system-wide),即收集整个系统上的所有 CPU 的性能数据,而不仅仅是当前运行的进程。
-g:启用调用图(call graph)记录。此选项用于收集函数调用栈信息,以便在分析时可以看到函数调用链。这有助于了解性能瓶颈发生在什么上下文中。
-p:记录特定进程的事件,通过进程ID指定。
-t:记录特定线程的事件,通过线程ID指定。
-e:指定要记录的事件类型。例如,cycles, instructions, cache-references, cache-misses 等。perf list可以列举所有的事件。
-o:指定输出文件,默认为 perf.data

执行perf命令后,通过perf report查看到的信息如下所示:下图中各列数据含义是:
OverHead/Children:表示该符号或函数消耗的 CPU 时间占整个采样期间的百分比。
Command:表示运行该符号或函数的进程的名称。
Shared Object:表示包含该符号或函数的共享对象或二进制文件名称,例如可执行文件或共享库
Symbol:表示采样期间的具体符号或函数名称。

对于各个指标数据的分析思路如下所示:

1. 识别高 Overhead 项
找出 Overhead 值较高的符号或函数,这些是系统的主要性能瓶颈。
例如,native_safe_halt 和 intel_idle 占用了较高的 CPU 时间,可能与系统的空闲状态管理相关。
2. 分析 Command
识别哪个进程(如 swapper、firefox、chrome)消耗了最多的 CPU 资源。系统进程(如 swapper)通常涉及内核级别的操作,而用户进程(如 firefox)涉及应用程序级别的操作。
3. 分析 Shared Object
确定性能瓶颈是来自于内核(如 [kernel.kallsyms])还是用户空间库(如 libxul.so)。内核符号表明系统级别的问题,而用户空间库表明应用程序的问题。
4. 分析 Symbol
具体到函数级别,了解性能瓶颈所在的代码段。如 js::RunScript 和 v8::internal::Compiler::Compile 表明 JavaScript 引擎在处理脚本或编译过程中存在性能问题。

  对于Linux系统的分析,繁杂的内容在于,命令很多,不同的命令收集的指标,有些有重叠,有些有所不同。当需要查看某个指标信息时,需要大概知道可以通过哪些命令进行查看。下图统计了不同性能指标数据可以使用的命令。(备注:该图来源于极客时间-Linux性能优化专栏)

  以上就是关于Linux系统cpu性能分析内容总体介绍。

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

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

相关文章

GPT-4o mini是什么?

今天,全网都知道 OpenAI 发现货了! GPT-4o mini 取代 GPT 3.5,从此坐上正主之位。 从官网信息来看,OpenAI 最新推出的 GPT-4o mini 重新定义了 AI 成本效益的标准,其性能优于前代模型 GPT-3.5 Turbo,且成本…

SpringBoot系列—4.SpringBoot 整合Mybatis、MP(MyBatis-Plus)

SpringBoot系列—1.IDEA搭建SpringBoot框架 SpringBoot系列—2.SpringBoot拦截器篇 SpringBoot系列—3.SpringBoot Redis篇 SpringBoot系列—4.SpringBoot 整合Mybatis、MP(MyBatis-Plus) SpringBoot系列—5.SpringBoot 整合Mybatis-Plus分页 **1.pom.xm…

设计模式-Git-其他

目录 设计模式? 创建型模式 单例模式? 啥情况需要单例模式 实现单例模式的关键点? 常见的单例模式实现? 01、饿汉式如何实现单例? 02、懒汉式如何实现单例? 03、双重检查锁定如何实现单例&#xff…

【扩散模型(五)】IP-Adapter 源码详解3-推理代码

系列文章目录 【扩散模型(一)】中介绍了 Stable Diffusion 可以被理解为重建分支(reconstruction branch)和条件分支(condition branch)【扩散模型(二)】IP-Adapter 从条件分支的视…

前端JS特效第48集:terseBanner焦点图轮播插件

terseBanner焦点图轮播插件&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下(全部代码在文章末尾)&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatibl…

python每日学习:异常处理

python每日学习8&#xff1a;异常处理 Python中的错误可以分为两种&#xff1a;语法错误和异常 语法错误(Syntax errors) &#xff1a;代码编译时的错误&#xff0c;不符合Python语言规则的代码会停止编译并返回 错误信息。 缺少起始符号或结尾符号(括号、引号等)。 缩进错误…

算法篇 滑动窗口 leetCode 30 串联所有单词的子串

串联所有单词的子串 1.题目描述2.题目解释2.1 原理解释2.2 文字分析 3.代码演示 1.题目描述 2.题目解释 2.1 原理解释 2.2 文字分析 3.代码演示

移动硬盘在苹果电脑上使用后在windows中无法读取 Win和Mac的硬盘怎么通用

在日益普及的跨平台工作环境中&#xff0c;苹果电脑与Windows PC之间的数据交换成为日常需求。然而&#xff0c;用户常面临一个困扰&#xff1a;为何苹果电脑的硬盘能在macOS下流畅运行&#xff0c;却在Windows系统中变得“水土不服”&#xff1f;这一问题核心在于硬盘格式的不…

mac docker no space left on device

mac 上 docker 拉取镜像报错 Error response from daemon: write /var/lib/docker/tmp/docker-export-3995807640/b8464f52498789c4ebbc063d508f04e8d2586567fbffa475e3cd9afd3c5a7cf2/layer.tar: no space left on device解决&#xff1a; 增加 docker 虚拟磁盘大小。如下图

Echarts + 低代码 :可视化如何赋能企业的创新之路?

Echarts最新技术资源&#xff08;建议收藏&#xff09; https://gcdn.grapecity.com.cn/forum.php?modviewthread&tid149493&highlightecharts 前言 数据驱动已经成为企业决策和业务优化的关键所在&#xff0c;在数字化时代&#xff0c;高效的数据分析与可视化呈现是…

多类支持向量机损失(SVM损失)

(SVM) 损失。SVM 损失的设置是&#xff0c;SVM“希望”每个图像的正确类别的得分比错误类别高出一定幅度Δ。 即假设有一个分数集合s[13,−7,11] 如果y0为真实值&#xff0c;超参数为10&#xff0c;则该损失值为 超参数是指在机器学习算法的训练过程中需要设置的参数&#xf…

大数据之写入Doris数据问题

1. 解决Key columns should be a ordered prefix of the schema. KeyColumns[1] (starts from zero) is xxx, but 背景 create table if not exists XXX ( fathercorp varchar(50), id decimalv3(38,0) ) ENGINEOLAP UNIQUE KEY(id) COMMENT xxxx DISTRIBUTED BY HASH(id) BUC…

深入理解Linux网络(一):内核如何接收网络包

深入理解Linux网络&#xff08;一&#xff09;&#xff1a;内核如何接收网络包 一、网络收包总览二、Linux启动1、创建 ksoftirqd 内核进程2、网络子系统初始化3、协议栈注册4、网卡初始化NAPI 5、启动网卡 三、接收数据1、硬中断处理2、ksoftirqd 内核线程处理软中断3、网络协…

数据库基础与安装MYSQL数据库

一、数据库管理系统DBMS 数据库技术是计算机科学的核心技术之一&#xff0c;具有完备的理论基础。使用数据库可以高效且条理分明地存储数据&#xff0c;使人们能够更加迅速、方便地管理数据 1.可以结构化存储大量的数据信息&#xff0c;方便用户进行有效的检索和访问 2.可以…

24届电子信息应届硕士生秋招+春招心得与感悟

背景&#xff1a; 研二下学期在深圳某互联网独角兽公司实习过四个月 岗位为测试实习生 求职的方向为互联网-测试岗 24届电子信息硕士 24秋招&#xff08;2023.9-2023.12&#xff09; 其实早在7月份部分互联网公司和大厂已经开始提前批了&#xff0c;因为我不是科班出身&…

Step-DPO 论文——数学大语言模型理解

论文题目&#xff1a;STEP-DPO: STEP-WISE PREFERENCE OPTIMIZATION FOR LONG-CHAIN REASONING OF LLMS 翻译为中文就是&#xff1a;“LLMs长链推理的逐步偏好优化” 论文由港中文贾佳亚团队推出&#xff0c;基于推理步骤的大模型优化策略&#xff0c;能够像老师教学生一样优…

【BUG】已解决:requests.exceptions.ProxyError: HTTPSConnectionPool

已解决&#xff1a;requests.exceptions.ProxyError: HTTPSConnectionPool 目录 已解决&#xff1a;requests.exceptions.ProxyError: HTTPSConnectionPool 【常见模块错误】 原因分析 解决方案 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&am…

OCC 创建方管(拉伸操作)

目录 一、OCC 拉伸操作 二、例子 1、使BRepBuilderAPI_MakeFace 2、使用BRepPrimAPI_MakeRevol 3、垂直路径扫掠 一、OCC 拉伸操作 BRepPrimAPI_MakeSweep Class Reference - Open CASCADE Technology Documentation OCC提供几种图形的构建是由基本图形的旋转&#xff0c;…

使用Python快速比较和替换键值对

问题背景 您需要在多个文件中替换所有特定字符串的实例。例如&#xff0c;您有一个包含 60728 个键值对的映射词典&#xff0c;需要处理多达 50 个文件&#xff0c;每个文件大约有 250000 行&#xff0c;并且需要在每行中替换多个键。 解决方案 方法一&#xff1a;使用正则表…

【区块链 + 智慧政务】山东荣成:区块链政务诚信管理系统 | FISCO BCOS应用案例

2018 年 9 月&#xff0c;荣成市政府与山东观海数据技术有限公司合作&#xff0c;基于 FISCO BCOS 区块链技术推动智慧城市建设&#xff0c; 其中&#xff0c;信用管理是智慧城市核心之一。 荣成市区块链政务诚信管理系统&#xff0c;建设信用信息征集、评价、披露和应用于一体…