写点什么

使用 Perf 和 FlameGraph 进行系统性能分析

作者:wong
  • 2022 年 2 月 15 日
  • 本文字数:854 字

    阅读完需:约 3 分钟

(2016 年写的一篇旧文,搬到这里了。)


Perf 是一款 Linux 平台的系统性能诊断和分析工具,通过它可以查看应用程序的运行性能,只是在图形方面表现的不足,好在有 Flame Graph.


Flame Graph 能够把 Perf 采集的数据转换为 svg 矢量图.


本文就简单说说它们的用法.

Perf

Perf 安装

yum install -y perf
复制代码

Perf 使用

  • perf list

列出所有 perf 能够采样点的事件

  • perf stat

以精简的方式提供被调试程序的整体情况和汇总数据

  • perf top

列出所有进程,实时显示统计信息

  • perf record

记录单个函数级别的统计信息

  • perf report

显示统计结果

Flame Graph

FLame Graph 其实是一组 perl 脚本,用以将 perf 等工具获取的原始采样数据转换为 Flame Graph 能够识别的文件格式,除了 perf,还支持 Dtrace,Systemtap 以及 XCode Instruments 等工具.


Flame Graph 能够生成 svg 矢量图,X 轴代表采样总量,Y 轴代表栈深度.每个框代表一个栈里的函数,宽度代表占用 CPU 的总时间.较宽的框表示该函数运行时间较慢或调用次数较多,从而占用 CPU 时间多.

Flame Graph 脚本列表

flamegraph.plstackcollapse-elfutils.plstackcollapse-gdb.plstackcollapse-instruments.plstackcollapse-jstack.plstackcollapse-perf.plstackcollapse.plstackcollapse-pmc.plstackcollapse-recursive.plstackcollapse-stap.plstackcollapse-vtune.pl
复制代码

使用示例

使用 perf record 生成采样数据


perf.data1perf record -a -g
复制代码


使用 perf script 对 perf.data 进行解析


perf script -i perf.data &> perf.unfold
复制代码


将 perf.unfold 中的符号进行折叠


./stackcollapse-perf.pl perf.unfold &> perf.folded
复制代码


生成 svg 图


./flamegraph.pl perf.folded > perf.svg
复制代码

参考站点

https://www.ibm.com/developerworks/cn/linux/l-cn-perf1

https://github.com/brendangregg/FlameGraph

http://kernel.taobao.org/index.php?title=Documents/Perf_flame_graph

http://unix.stackexchange.com/questions/14227/do-i-need-root-admin-permissions-to-run-userspace-perf-tool-perf-events-ar

https://gist.github.com/trevnorris/9616784

http://www.infoq.com/cn/news/2015/08/java-flamegraph

发布于: 刚刚阅读数: 2
用户头像

wong

关注

人生充满黑色幽默 2017.10.24 加入

一名工程师

评论

发布
暂无评论
使用Perf和FlameGraph进行系统性能分析