前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >性能分析工具—【perf】使用指南

性能分析工具—【perf】使用指南

作者头像
用户9831583
发布2023-02-27 17:13:48
5.1K0
发布2023-02-27 17:13:48
举报
文章被收录于专栏:码出名企路码出名企路

perf 是Linux的一款性能分析工具,能够进行函数级和指令级的热点查找,可以用来分析程序中热点函数的CPU占用率,从而定位性能瓶颈。

Performance analysis tools for Linux.

系统性能优化通常可以分为两个阶段:性能分析和性能优化。性能分析的目的是查找性能瓶颈、热点代码,分析引发性能问题的原因;基于性能分析,可以进行性能优化,包括:算法优化(空间复杂度和时间复杂度的权衡)和代码优化(提高执行速度、减少内存占用)。

一,原理

Linux性能计数器是一个基于内核的子系统,它提供一个性能分析框架,比如硬件(CPU、PMU(Performance Monitoring Unit))功能和软件(软件计数器、tracepoint)功能。通过perf,应用程序可以利用PMU、tracepoint和内核中的计数器来进行性能统计。

Perf 可以对程序进行函数级别的采样,从而了解程序的性能瓶颈在哪里。其基本原理是:每隔一个固定时间,就是CPU上产生一个中断,看当前是哪个进程、哪个函数,然后给对应的进程和函数加一个统计值,这样就知道CPU有多少时间在某个进程或某个函数上了。

二,安装

https://blog.csdn.net/qq_48201696/article/details/126381924

代码语言:javascript
复制
#下载linux-tools

sudo apt-get install linux-tools-common

 

#查看版本

perf --version

 

#查看内核版本

uname -r

5.15.0-58-generic

 

#安装

sudo apt install linux-tools-5.15.0-58-generic

 

#查看版本

perf --version

perf version 5.15.74

 

#配置之后才能用

 

>$ sudo gedit /etc/sysctl.conf

# 然后将kernel.perf_event_paranoid = -1 写入,更新一下

>$ sudo sysctl -p

三,使用

https://www.cnblogs.com/arnoldlu/p/6241297.html

1,top适合监控整个系统的性能

代码语言:javascript
复制
#perf top --call-graph fractal

2,stat比较适合单个程序的性能分析

代码语言:javascript
复制
#sudo perf stat ls -lt

3,record/report更适合对程序进行更细粒度的分析

程序见:https://www.cnblogs.com/arnoldlu/p/6241297.html

代码语言:javascript
复制

#编译fork.c文件

gcc fork.c -o fork -g -O0

#在当前目录生成perf.data文件

sudo perf record -a -g ./fork

#结果显示

sudo perf report --call-graph none

#或者直接,查看函数的调用占比

代码语言:javascript
复制
sudo perf report -i perf.data
代码语言:javascript
复制
#将本目录下的.data文件生成 svg
sudo perf timechart
解锁:sudo chmod -R 777 output.svg

生成的结果必须用网页打开:

#查看当前linux进程占比

perf report -n –stdio

4,火焰图

https://www.cnblogs.com/wx170119/p/11459995.html

按这个步骤来:

https://blog.csdn.net/pwl999/article/details/106786495

代码语言:javascript
复制
#生成perf.data
sudo perf record -g -F 99 ls

#解锁
sudo chmod -R 777 perf.data


#下载 FlameGraph-master,在其目录下执行
https://github.com/brendangregg/FlameGraph.git
#生成out.perf
sudo perf script -i perf.data > out.perf
 

#生成out.floded
./stackcollapse-perf.pl out.perf > out.floded

#生成svg
./flamegraph.pl out.floded > ls.svg

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码出名企路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档