Perf
perf
可以看作是 pidstat
、top
和 iotop
的结合体,但它不仅仅局限于这些工具的功能,还提供了更加底层的性能分析,尤其在 CPU、内存和硬件事件方面的跟踪能力。
perf
和其他工具的对比:
top
:实时显示系统和进程的 CPU 使用情况,类似于perf top
。pidstat
:提供进程级别的详细资源使用情况,包括 CPU、内存、I/O 等,类似于perf stat
和perf record
的部分功能。iotop
:用于监控磁盘 I/O 负载,perf
可以通过perf stat
和perf record
来查看磁盘 I/O 活动(虽然它不像iotop
那样专注于磁盘 I/O)。
perf
提供的更多功能:
- 硬件事件分析:如 CPU 缓存、分支预测、缓存未命中等。
- 系统调用跟踪:通过
perf trace
可以跟踪系统调用的行为,类似strace
。 - 低级别性能采样:可以进行更精细的性能数据采样,获取程序执行的详细信息。
总结
perf
是一个综合性的工具,能够进行深度的性能分析,涵盖了 pidstat
、top
、iotop
的部分功能,并且提供了更多低层次的硬件性能监控,适用于高效的性能调优和分析。
安装:-----快速找出性能瓶颈和优化点
sudo apt-get install linux-tools-common
sudo apt update
sudo apt install linux-tools-5.15.0-131-generic linux-cloud-tools-5.15.0-131-generic
采用perf对系统CPU事件进行采样:
采样60s,会生成一个perf.data文件;
1.对一个正在运行的进程进行采样
perf record -p PID -g -- sleep 60
2.全新运行一个二进制文件main,进行采样
sudo perf record -F 99 -g ./main --sleep 60
生成火焰图:
git clone https://github.com/brendangregg/FlameGraph.git
#安装perl
perl -v查看
perf record -g ./test sleep 10
perf script -i perf.data &> perf.unfold
./FlameGraph/stackcollapse-perf.pl perf.unfold &> perf.folded
./FlameGraph/flamegraph.pl perf.folded >perf.svg
火焰图的宽度用于比较不同函数或代码路径的性能,高度用于显示函数调用堆栈的深度。
主要功能:
-
性能计数器:
perf
支持硬件性能计数器、软件性能计数器、跟踪点以及动态探针(如 kprobes 或 uprobes)。 -
系统分析:能够对整个系统进行统计分析,包括内核和用户态代码。
-
子命令:
perf
提供多个子命令,如:stat
:测量单个程序或系统在特定时间内的事件计数。top
:动态显示热点函数,类似于top
命令。record
:记录单个程序的采样数据。report
:分析由record
生成的文件,生成平面或图形化的性能报告。annotate
:对源代码或汇编代码进行注释,显示性能热点。sched
:跟踪和测量调度器的动作和延迟。list
:列出可用的事件。
Top
工具 | 主要监控 | 作用 |
---|---|---|
top |
CPU、内存使用率 | 查看进程的 CPU 占用、内存占用,发现高 CPU 负载进程 |
iotop |
磁盘 I/O 读写 | 查看进程的磁盘读写速率,发现高 I/O 负载进程 |
top 命令的汇总区域显示了五个方面的系统性能信息:
负载:时间,登陆用户数,系统平均负载;
进程:运行,睡眠,停止,僵尸;
cpu:用户态,核心态,NICE,空闲,等待IO,中断等;
内存:总量,已用,空闲(系统角度),缓冲,缓存;
交换分区:总量,已用,空闲
任务区域默认显示:进程 IDÿ