linux性能之巅 linux程序性能分析工具
Linux perf 命令
perf 是 Linux 系统性能分析工具集,全称为性能事件计数器。它提供基于 Linux 内核的 perf_events 子系统,能够实现硬件和软件方面的性能分析能力。
perf 的主要功能包括:CPU 性能分析函数调用跟踪硬件事件统计软件事件系统监控跟踪perf 基本语法
perf命令的基本语法格式为:perf [--version] [--help] COMMAND [ARGS]登录后复制
常用子命令包括:stat:性能统计命令记录:记录性能数据报告:分析记录的数据顶部:实时性能监控列表:上市可用事件注释:源代码级别分析perf 常用子命令详解perf stat
统计命令事件执行过程中的各种硬件和软件。perf stat [options] 命令[command-options]登录后复制
常用选项:-e:指定要监控的事件-p:监控指定进程ID-a:监控所有CPU-r:重复运行并显示干-d:显示更多详细事件
示例:实例#统计ls命令的执行情况perf stat ls#监控指定进程perf stat -p 1234#监控特定事件perf stat -e周期,指令,缓存未命中lsperf record
记录性能数据到文件(默认 perf.data)。perf record [options] command [command-options]登录后复制
常用选项:-g:记录调用图(call graph)-F:采样频率(Hz)-p:记录指定进程-o:指定输出文件-e:指定要记录的事件
实例:实例# 记录 ls 命令的执行情况perf record ls#以99Hz频率记录进程1234perf record -F 99 -p 1234 -gperf report
分析perf记录记录的数据。perf报告[选项]登录后复制
常用选项:-i:指定输入文件-n:显示样本数量--stdio:文本模式输出-g:显示调用图-s:按指定排序字段
示例:实例#分析默认的perf.data文件perf报告#分析指定文件并以文本模式输出perf报告 -i perf.data.old --stdioperf top
实时系统中最消耗资源的函数。perf top [选项]登录后复制
常用选项:-e:指定监控事件 -p:监控指定进程 -K:隐藏内核符号 -U:用户空间符号 -g:显示调用图
示例:实例#实时监控系统性能perf top#监控特定事件perf top -e cache-missesperf列表
列出所有可监控的事件。
perf list [hw|sw|cache|tracepoint|pmu|event_glob]登录后复制
示例:实例#排队所有事件perf list#排队硬件服务器事件perf列表cacheperf事件类型
perf可以多种监控类型的事件:事件类型描述示例硬件CPU硬件事件周期,说明软件开源软件事件context-switches,page-faultsCache服务器相关事件cache-references, cache-missesTracepoints 静态内存跟踪点 syscalls,block,schedPMU 处理器特定事件(供应商特定)Breakpoints 断点事件mem:[:access]perf 实际应用示例1. 分析程序性能极限实例# 记录程序执行perf record -g ./my_program# 分析结果perf report -g2. 查找CPU热点函数perf top -p $(pidof my_program)登录后复制3. 比较两次运行的性能差异实例# 第一次运行perf record -o perf.data.1 ./my_program input1# 第二次运行perf record -o perf.data.2 ./my_program input2# 比较差异perf diff perf.data.1 perf.data.24. 分析系统实例调用#启动可用的系统调用跟踪点perf list 'syscalls:*'#跟踪open系统调用perf stat -e 'syscalls:sys_enter_open' -a sleep 10perf使用技巧
减少开销:对于长时间运行的性能分析,适当降低采样频率(如-F) 99)
符号解析:确保调试符号可用,可以通过安装调试包或使用-g编译程序
构造图生成:结合FlameGraph工具生成分析的性能分析图
多核分析:使用-a选项监控所有CPU,或使用-C指定特定CPU
用户/内核空间分离:使用-k和-u选项分别分析内核用户和空间常见问题解决
权限问题:echo -1 gt; /proc/sys/kernel/perf_event_paranoid登录后复制
或使用sudo运行perf
短缺符号信息:确保程序使用-g选项编译安装调试符号包
采样数据过大:减少采样频率采样时间使用--no-call-graph减少调用图信息
无法解析Java/Python等高级语言:需要特定语言的性能工具支持考虑使用特定语言的分析工具进阶学习资源
官方文档:Linux内核源码中的工具/性能/文档目录
书籍推荐:《系统》性能:企业与云》《性能之巅:详尽系统、企业与云计算》
在线资源:Brendan Gregg的博客和工具集perf-tools工具集
相关工具:FlameGraph:
可视化性能数据bpftrace:更灵活的动态追踪
通过掌握perf命令,您可以深入分析Linux系统的性能特征,快速定位性能瓶颈,优化应用程序和系统配置。
以上文章就是linux性能分析工具-perf命令使用与实例的详细内容,更多请关注乐哥常识网相关其他!