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,一经查实,立即删除!

相关文章

OpenSSL再曝CCS注入漏洞-心伤未愈又成筛子

太戏剧了,昨晚看了佳片有约,还不错,2012版的《完美回顾》,像我这样的人依旧选择用电视或者去影院看电影,在没有中间插播广告的时候,体验憋尿得过程中,总是能突然有非常多的想法,这是…

如何从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…

用SQL语句添加删除修改字段

1.增加字段 alter table docdsp add dspcodechar(200)2.删除字段 ALTER TABLE table_NAME DROP COLUMNcolumn_NAME3.修改字段类型 ALTER TABLE table_name ALTER COLUMNcolumn_name new_data_type4.sp_rename 改名 EXEC sp_rename [dbo].[Table_1].[fi…

通过命令修改wampserver的mysql密码

WAMP安装好后,mysql教程密码是为空的,那么要如何修改呢?其实很简单,通过几条指令就行了,下面我就一步步来操作。 首先,通过WAMP打开mysql控制台。 提示输入密码,因为现在是空,所以直…

DBNull

1、执行ExecuteScalar时,要进行Null判断,因为对Null进行操作会报:NullReferenceException 2、返回DBNull的情况,因为DBNull是用来表示数据库中Null的,所以如果数据中返回null,程序中就是DBNull&#xff0c…

什么是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、体验降级(看到…

一天一道算法题--6.15--卡特兰数

感谢微信平台---一天一道算法题---每天多一点进步- problem: 12个高矮不同的人 排成两排 每排必须是从矮到高排列 而且第二行比对应的第一排的人高 问排列方式有多少种? analyse: 据说 这题 是来自于 阿里巴巴的面试题 果然 很有分量 ~~ 我反正 胡思乱想了好多 没搞…

现有一些开源ESB总线的比較

现有的开源ESB总线中,自从2003年第一个开源总线Mule出现后,如今已经是百花争鸣的景象了。如今我就对现有的各种开源ESB总线根据性能、可扩展性、资料文档完整程度以及整合难易程度等方面展开。 一.CXF CXF的定位不是ESB总线,而是一…

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是对应的,它们构成了两个端点之间的虚拟通信链路…

firefox 插件开发

IDE,你可以尝试下NetBeans foxbeans这个插件。转载于:https://www.cnblogs.com/sode/archive/2013/01/25/2876562.html

13种负载均衡算法

目录前言(1)轮转调度(Round-Robin Scheduling)算法(2)加权轮转调度(Weighted Round-Robin Scheduling)算法(3)随机均衡调度(Random Scheduling&am…

对于shell脚本参数获取时的一点小技巧

问题如下: 根据脚本参数的个数$#进行一个循环,在依次输出每个参数$1 $2 $3...... 我有一个循环变量i $i 取到这时的i为1,我想使用这个1再去调用$1,也是就是打印出第一个参数 就是$($i)的意思来取到第几个参数,当然$($i)是不好用的…

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

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

C++自动类型推导 : auto 与 decltype 用法

基本用法与区别 auto 总是推导出“值类型”,绝不会是“引用”,如果有引用,auto会把引用去掉,推导出值类型; auto 可以附加上 const、volatile、*、& 这样的类型修饰符,得到新的类型。 auto x 10L; // auto推导为…

C++智能指针使用指南 part1:基本使用

加粗样式>TOC 智能指针是代理模式的具体应用,它使用 RAII 技术代理了裸指针,能够自动释放内存, 无需程序员干预,所以被称为“智能指针”。 智能指针不是指针,而是一个对象,所以不要对其调用delete&…