简介
在遇到一些内存异常的时候,经常这部分的代码是很难去进行分析的,最近了解到Perf这个神器,这里也展开介绍一下如何使用Perf以及如何去画火焰图。
1. Perf 基础
1.1 Perf 简介
perf是Linux下的一款性能分析工具,能够进行函数级与指令级的热点查找。利用perf剖析程序性能时,需要指定当前测试的性能时间。性能事件是指在处理器或操作系统中发生的,可能影响到程序性能的硬件事件或软件事件
1.2 Perf的安装
ubuntu 18.04:
sudo apt install linux-tools-common linux-tools-4.15.0-106-generic linux-cloud-tools-4.15.0-106-generic
1.3 perf命令简要介绍
perf list
perf list
主要是用于列出有哪些可用的event,可以供 perf top -e eventname
来分析。perf list [hw|sw|cache|tracepoint|pmu|event_glob]
,其中perf list hw
可以列出 hard ware 的event, sw 是software的event, 其它类似。
hw/hardware显示支持的硬件事件相关,如: perf list hardwaresw/software显示支持的软件事件列表: perf list swcache/hwcache显示硬件cache相关事件列表: perf list cachepmu显示支持的PMU事件列表: perf list pmutracepoint显示支持的所有tracepoint列表,这个列表就比较庞大: perf list tracepoint
$ perf list hw
$ perf list sw
cpu-clock [Software event]
task-clock [Software event]
page-faults OR faults [Software event]
context-switches OR cs [Software event]
cpu-migrations OR migrations [Software event]
minor-faults [Software event]
major-faults [Software event]
alignment-faults [Software event]
emulation-faults [Software event]
dummy [Software event]
$ perf list pmu
$ perf list event_glob
perf top
perf top的作用是实时显示系统/进程的性能统计信息,上面的 perf list [hw|sw...]
可以知道所有的 tracepoint events, 接下来我们就可以使用 perf top -e tracepoint-event
来专门获得指定的tracepoint的信息。其中常用的常用参数有
-e:指定性能事件-a:显示在所有CPU上的性能统计信息-C:显示在指定CPU上的性能统计信息-p:指定进程PID-t:指定线程TID-K:隐藏内核统计信息-U:隐藏用户空间的统计信息-s:指定待解析的符号信息‘‐G’ or‘‐‐call‐graph’ <output_