perf笔记
记录一下这个工具,感觉还挺好用的。参考:
如何读懂火焰图? - 阮一峰的网络日志 (ruanyifeng.com)
perf的基本使用方法-菜鸟笔记 (coonote.com)
使用 Perf 和火焰图分析 CPU 性能 | Senlin's Blog (senlinzhan.github.io)
安装:
# Ubuntu系统 sudo apt-get install linux-tools-common linux-tools-generic linux-tools-`uname -r` # Centos系统 yum install -y perf
查看版本:
$ perf --version
perf version 5.4.44
测试:
#include <stdio.h> #include <stdlib.h> void long_test() { int i, j; for (i = 0; i < 1000000; i++) j = i; } void foo2() { int i; for (i = 0; i < 10; i++) long_test(); } void foo1() { int i; for (i = 0; i < 100; i++) long_test(); } int main(void) { foo1(); foo2(); }
采样60s,会生成一个perf.data文件。
# 方式一:对一个正在运行的进程,进行采样 perf record -p PID -g -- sleep 60 # 方式二:全新运行一个二进制文件main,进行采样 sudo perf record -F 99 -g ./main -- sleep 60
perf stat:
生成火焰图:
利用这个开源工具可以将报告生成可视化的svg图片,更容易查看对应的CPU开销时间和调用栈深度。
git clone --depth 1 https://github.com/brendangregg/FlameGraph.git # 安装perl yum install -y perl # Ubuntu apt install -y perl
生成火焰图的脚本
对二进制文件main进行10秒的采样,然后生成火焰图
非root用户需要加sudo
perf record -g ./main sleep 10 perf script -i perf.data &> perf.unfold ./FlameGraph/stackcollapse-perf.pl perf.unfold &> perf.folded ./FlameGraph/flamegraph.pl perf.folded > perf.svg
其他用法:
其他工具: