CPU使用率的查看以及性能分析(perf top/record/report)

目录

  • CPU使用率
  • 查看CPU使用率(top、pidstat解释)
  • CPU使用率过高
    • perf top
    • perf record 和 perf report

CPU使用率

Linux通过/proc虚拟文件系统,向用户空间提供了系统内部状态的信息。
/proc/stat提供的就是系统的CPU和任务统计信息。
执行命令cat /proc/stat | grep ^cpu,表示只保留各个CPU的数据,结果如下:
在这里插入图片描述
输出表示:
第一行表示所有CPU的不同场景下的累加节拍数。
Tips:为了维护 CPU 时间,Linux 通过事先定义的节拍率(内核中表示为 HZ),触发时间中断,并使用全局变量 Jiffies 记录了开机以来的节拍数。每发生一次时间中断,Jiffies 的值就加 1。通过命令grep 'CONFIG_HZ=' /boot/config-$(uname -r)可以查看系统配置的节拍率,即每秒钟触发多少次时间中断。
第一列:CPU编号
接下来的几列:
usr(缩写为us),代表用户态CPU时间。不包含nice时间,包括guest时间
nice(缩写ni),代表低优先级用户态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,代表虚拟化运行其他操作系统的时间,也就是运行虚拟机的CPU时间
guest_nice(缩写为gnice),代表以低优先级运行虚拟机的时间。
CPU使用率的定义则是:
在这里插入图片描述
/proc/stat 的数据记录的是开机以来的节拍累积值,所以算出来的是平均CPU使用率。
一般来说,性能工具回取间隔一段时间(如3s)的两次值,作差后,再计算这段时间内的平均CPU使用率:
在这里插入图片描述

查看CPU使用率(top、pidstat解释)

关于top与ps:
top 显示了系统总体的 CPU 和内存使用情况,以及各个进程的资源使用情况。
ps 则只显示了每个进程的资源使用情况。
top命令中的第三行%cpu即系统CPU使用率,默认显示的是平均值
在这里插入图片描述
空白行之后是进程实时信息,每个进程都有一个%CPU列,表示进程的CPU使用率。该使用率 = 用户态 + 内核态CPU使用率的总和,包括进程用户空间使用的CPU、通过系统调用执行的内核空间CPU、就绪队列等待运行的CPU。
再按1,切换显示每个CPU使用率。
在这里插入图片描述
接下来使用pidstat:
包括了:
用户态CPU使用率(%usr)
内核态CPU使用率(%system)
运行虚拟机CPU使用率(%guest)
等待CPU使用率(%wait)
总的CPU使用率(%CPU)
最后输出平均值

# 隔 1 秒 输出一组数据, 共输出5组
pidstat 1 5
21时55分30秒   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
21时55分31秒     0        54    0.00    1.00    0.00    0.00    1.00     7  ksoftirqd/7
21时55分31秒  1000      1311    1.00    0.00    0.00    0.00    1.00     4  gnome-shell
21时55分31秒  1000      3170    0.00    1.00    0.00    0.00    1.00     1  pidstat
...
平均时间:   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
平均时间:     0        54    0.00    0.25    0.00    0.00    0.25     -  ksoftirqd/7
平均时间:     0       135    0.00    0.25    0.00    0.00    0.25     -  kworker/u16:2-phy0
平均时间:  1000       998    0.25    0.25    0.00    0.00    0.50     -  Xorg
平均时间:  1000      1311    1.25    0.50    0.00    0.00    1.75     -  gnome-shell
平均时间:  1000      2370    0.25    0.00    0.00    0.00    0.25     -  chrome
平均时间:  1000      2712    0.75    0.00    0.00    0.00    0.75     -  chrome
平均时间:  1000      3157    0.50    0.00    0.00    0.00    0.50     -  gnome-terminal-
平均时间:  1000      3170    0.25    0.75    0.00    0.00    1.00     -  pidstat

CPU使用率过高

使用perf,它以性能事件采样为基础,可以分析系统的各种事件和内核性能,也可以分析指定应用程序的性能问题。

perf top

类似于top,它能够实时显示占用CPU时钟最多的函数或者指令,因此可以用来查找热点函数。如:

$ perf top
2 Samples: 833
3 Overhead
of event 'cpu-clock', Event count (approx.): 97742399
Shared Object Symbol
4 7.28% perf [.] 0x00000000001f78a4
5 4.72% [kernel] [k] vsnprintf
6 4.32% [kernel] [k] module_get_kallsym
7 3.65% [kernel] [k] _raw_spin_unlock_irqrestore

输出结果解释:
第一行,包含三个数据: 采样数(Samples)、事件类型(event)和事件总数量(Event count)。
下面的表格数据包含四列:
第一列: Overhead,该符号的性能事件在所有采样中的比率
第二列:Shared,该函数或指令所在的动态共享对象,如内核、进程名、动态链接库名、内核模块等
第三列:Object,是动态共享对象的类型,比如[.]表示用户空间的可执行程序,或者动态链接库,[k]表示内核空间。
第四列:Symbol,符号名,即函数名。当函数名未知时,用16进制的地址表示

perf record 和 perf report

perf top 能够实时展示系统性能,但是不能保存数据,也就无法用于离线或者后续的分析。
而perf record 提供了保存数据的功能,保存后的数据,需要使用perf report 来解析展示:

perf record # 按下 ctrl + c 终止采样
[perf record: Woken up 1 times to write data]
[perf record: Captured and wrote 0.452 MB perf.data(6093 samples) ]perf report # 展示类似于perf top的报告

在实际使用中经常为perf top 和 perf record 加上 -g 参数,开启调用关系的采样,方便根据调用链来分析性能。

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

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

相关文章

如何从JavaScript数组中获取多个随机唯一元素?

The JavaScript is a very versatile language and it has a function almost everything that you want. JavaScript是一种非常通用的语言,它几乎具有您想要的所有功能。 Here, we will show you how to generate random unique elements from an array in JavaSc…

什么是ACID理论(二阶段、三阶段提交、TCC)

目录二阶段提交协议TCC(Try-Confirm-Cancel)预留成功预留失败三阶段提交协议总结Some questionsreferenceACID理论时对事务特性的抽象和总结,想要实现ACID需要掌握二阶段提交协议以及TCC 这里是有关协议的论文PDF链接: CONCURRENC…

oracle安装后新建数据库实例及配置

ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法 (2011-01-20 13:50:37) 转载▼标签: it 分类: 技术早上同事用PL/SQL连接虚拟机中的Oracle数据库,发现又报了“ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务…

html5游戏开发--动静结合(二)-用地图块拼成大地图 初探lufylegend

一、前言 本次教程将向大家讲解如何用html5将小地图块拼成大地图,以及如何用现有的高级html5游戏开发库件lufylegend.js开发游戏。 首先让我们来了解了解如何用html5实现动画,毕竟“动静结合”是先有动再有静。看了上一章的内容,或许你就有了…

BASE理论(基本可用策略+ 最终一致性实现)

目录实现基本可用的几个策略1、流量削峰(不同地区售票时间错峰出售)2、延迟响应,异步处理(买票排队,基于队列先收到用户买票请求,排队异步处理,延迟响应)3、体验降级(看到…

Paxos算法(Basic Paxos 与 Multi-Paxos思想)

目录Basic Paxos三个角色达成共识的方法对于Basic Paxos的总结Multi-Paxos领导者优化 Basic Paxos 执行referencePaxos 算法包含 2 个部分: 1、Basic Paxos : 描述多节点之间如何就某个值达成共识 2、Multi-Paxos : 描述执行多个Basic Paxos实…

vs2012下调试mvc4源代码

当前流行的应该是mvc3才对。然后在研究mvc3的源代码时候,Html这个属性下的扩展方法Partial()都没有。IntelliSense不会提示该方法,找了半天的资料也问了一些博友,没看到好的解决棒法。最后没辙另辟蹊跷,就开始着手研究mvc4的源代码…

JAVA UDP网络编程学习笔记

一、UDP网络编程概述 采用TCP协议通信时,客户端的Socket必须先与服务器建立连接,连接建立成功后,服务器端也会持有客户端连接的Socket,客户端的Socket与服务器端的Socket是对应的,它们构成了两个端点之间的虚拟通信链路…

(转)页游安全攻与防,SWF加密和隐藏密匙

原文链接:http://netsecurity.51cto.com/art/201211/364775.htm 页游,最最核心的就是客户端(swf)与服务端的游戏通信了。游戏通信产生的封包,内容是否可识别,可篡改,可重放,处理逻辑…

linux 命令案例学习——文件搜索

两个搜索文件的工具 locate ——仅仅通过文件名查找文件find ——依据文件的各种属性在既定目录(包括子目录)里查找一个通常与文件搜索命令一起使用、处理搜索结果文件列表的命令 xargs1 locate 1.1 查找文件名中含有zip的文件名 locate zip 看下结…

Redis 缓存击穿、缓存穿透、缓存雪崩的处理方法

常用的分布式缓存Redis单机并发量能达到万级,常用的关系型数据库MySQL一般并发量是千级,他们支持的并发量可能差十倍,所以要尽可能把流量拦截在缓存层。 缓存击穿 一个并发访问量比较大的key在某个时间过期,导致所有的请求直接打…

图像处理基础

图像处理基础 在计算机中,按照颜色和灰度的多少可以将图像分为二值图像、灰度图像、索引图像和真彩色RGB图像四种基本类型。目前,大多数图像处理软件都支持这四种类型的图像。 (1) 二值图像:一幅二值图像的二维矩阵仅由0、1两个值构成&#x…

缓存一致性解决方法

对于缓存 数据库读写,有个经典的Cache Aside Pattern: 读取:先读取缓存,缓存里没有,读取数据库,然后返回响应,顺便保存缓存: 更新:先更新数据库,然后删除缓…

使用SpringMVC的表单验证

上一篇搭建了基本项目,这一篇在此基础上加入表单验证功能。 第一步,添加command类 Java代码 package test.bean; import javax.validation.constraints.Size; public class User { Size(min3,max30) private String username; …

单体、分布式、微服务、Serverless软件架构一览

目录软件架构单体架构分布式应用微服务架构Serverless架构总结Reference软件架构 软件架构就是软件的基本结构,合适的架构是软件成功的最重要因素之一。这里列举了目前流行的4种软件架构。 单体架构 典型的三级架构:前端(web/手机端&#…

Midjourney V6刷屏,但它最可怕的地方居然不是那些神图?

Midjourney在沉寂九个月后推出了Midjourney V6,这个文生图产品体现出的更细腻的细节处理,更强大的语言理解能力和更加“不像AI”的图片效果在过去几天引发一片惊呼。 作为一个闭源的模型产品,Midjourney的魔法配方并不为人所知,但…

连续内存分区式内存管理

目录前言分区式内存管理动态分区内存管理总结本笔记参考黄工的https://mp.weixin.qq.com/s/k0W_LqI1zBAYC1GU1U2HQA 前言 内存管理模块主要负责内存的初始化、分配以及释放。 从分配内存是否连续可以分为两大类: 1、连续内存管理 为进程分配的内存空间是连续的&a…

用DEVC++作图

小海豚学NOIP,老师说要用DEV C。 小海豚喜欢画图,记得以前用C#编些程序给她看。可前一阵打开看,我的免费Visual Studio过期了。可恶的Microsoft ,不想用盗版难道就要每个月就下载一次? 于是就用DEV C的Windows调用吧。…

Python服务器开发三:Socket

Python服务器开发三:Socket socket是操作系统中I/O的延续,它可以使进程和机器之间的通信成为可能。socket可以看成一个标准的文件描述符。不同的是文件需要用open()函数打开,而socket用socket() 函数建立.recv()、send()函数和read()、write(…

Linux命令常见

摘自: 常考的 21 条 Linux 命令 目录)cd,切换路径ls,查看文件与目录的命令cp,用于复制文件mv,用于移动文件、目录cat,查看文件内容find,文件搜索文件权限命令, 设置权限,-取消权限文本处理命令打包和压缩文件命令进程相…