perf是Linux内核提供的一个强大的性能分析工具,它能够帮助开发者进行系统级和进程级的性能分析。以下是perf工具的详细使用指南。
perf(Performance Event Counters)是Linux内核的一部分,它利用CPU的性能监控单元(PMU)来收集硬件和软件事件,包括: - CPU周期数 - 指令数 - 缓存命中/失效 - 分支预测 - 系统调用 - 上下文切换等
大多数Linux发行版都包含perf工具:
# Debian/Ubuntu
sudo apt-get install linux-tools-common linux-tools-generic
# RHEL/CentOS
sudo yum install perf
# Arch Linux
sudo pacman -S perf
列出所有可监控的事件
perf list
统计程序运行时的各种事件
# 基本统计
perf stat [command]
# 统计特定进程
perf stat -p [PID]
# 统计特定事件
perf stat -e cache-misses,cycles,instructions [command]
实时显示系统中最消耗CPU的函数
perf top
记录性能数据并生成报告
# 记录性能数据
perf record -g [command] # -g 记录调用图
# 生成报告
perf report
查看特定函数的汇编代码及热点
perf annotate [function_name]
火焰图是直观展示性能瓶颈的可视化工具:
# 记录数据
perf record -F 99 -ag -- sleep 60
# 生成报告
perf script | stackcollapse-perf.pl | flamegraph.pl > perf.svg
perf trace [command]
perf probe --add tcp_sendmsg
perf record -e probe:tcp_sendmsg -aR sleep 10
perf report
# 1. 使用top找到高CPU进程PID
top
# 2. 分析该进程
perf top -p [PID]
# 3. 记录详细数据
perf record -g -p [PID] -- sleep 30
# 4. 生成报告
perf report -n --stdio
perf stat -e cache-references,cache-misses [command]
perf stat -e 'syscalls:sys_enter_*' [command]
sudo sysctl -w kernel.perf_event_paranoid=1 # 降低安全限制
perf record -g # 确保使用-g选项记录调用图
perf record -F 99 -a -g -- sleep 10 # 限制采样频率和时间
perf工具功能强大,结合其他工具如strace、vmstat等可以更全面地分析系统性能问题。