perf top详解
Perf Top 参数详解(按给定顺序)
1. 基础选项
-a, --all-cpus
作用: 在所有CPU上进行系统级收集
perf top -a # 监控所有CPU
perf top # 默认就是-a
-b, --branch-any
作用: 对任何已执行的分支进行采样
perf top -b # 启用分支采样
perf top --branch-any # 同-b
-c, --count <n>
作用: 采样的事件周期数(每发生n次事件采样一次)
perf top -c 1000000 # 每100万次事件采样一次
perf top -e cache-misses -c 1000 # 每1000次缓存未命中采样一次
-C, --cpu <cpu>
作用: 指定要监控的CPU列表
perf top -C 0 # 只监控CPU 0
perf top -C 0,1,2 # 监控CPU 0,1,2
perf top -C 0-3 # 监控CPU 0-3
perf top -a -C 0,2-4 # 监控所有CPU,但只显示CPU 0,2,3,4
-d, --delay <n>
作用: 刷新间隔的秒数
perf top -d 1 # 每秒刷新一次
perf top -d 0.5 # 每0.5秒刷新一次
perf top -d 0 # 尽可能快地刷新
-D, --dump-symtab
作用: 转储用于性能分析的符号表
perf top -D # 转储符号表
perf top -D > symtab.txt # 将符号表保存到文件
-E, --entries <n>
作用: 显示的条目数
perf top -E 20 # 显示前20个函数
perf top --entries 50 # 显示前50个函数
-e, --event <event>
作用: 事件选择器。使用'perf list'列出可用事件
perf top -e cycles # 监控CPU周期(默认)
perf top -e cache-misses # 监控缓存未命中
perf top -e instructions # 监控指令数
perf top -e 'cpu-cycles,instructions' # 监控多个事件
perf top -e '{cycles,instructions}' # 事件分组
-f, --count-filter <n>
作用: 只显示事件数超过此值的函数
perf top -f 1000 # 只显示采样超过1000次的函数
perf top --count-filter 500 # 只显示采样超过500次的函数
-F, --freq <freq or 'max'>
作用: 采样频率
perf top -F 99 # 99Hz采样频率
perf top -F 1000 # 1000Hz采样频率
perf top -F max # 使用最大采样频率
perf top --freq 4000 # 4000Hz采样频率(默认)
-g
作用: 启用调用图记录和显示
perf top -g # 启用调用图(默认方式)
perf top -g dwarf # 使用DWARF调试信息
perf top -g fp # 使用帧指针
perf top -g lbr # 使用最后分支记录
-i, --no-inherit
作用: 子任务不继承计数器
perf top -i # 子进程不继承性能计数器
perf top -p 1234 -i # 监控PID 1234,但不监控其子进程
-j, --branch-filter <branch filter mask>
作用: 分支栈过滤器模式
perf top -j any # 任何分支
perf top -j any_call # 任何调用分支
perf top -j any_ret # 任何返回分支
perf top -j ind_call # 间接调用
perf top -j aborts # 事务中止
perf top -j in_tx # 在事务中
perf top -j no_tx # 不在事务中
perf top -j cond # 条件分支
perf top -j save_type # 保存分支类型
-K, --hide_kernel_symbols
作用: 隐藏内核符号
perf top -K # 只显示用户空间符号
perf top --hide_kernel_symbols # 同-K
-k, --vmlinux <file>
作用: 指定vmlinux文件路径
perf top -k /boot/vmlinux-$(uname -r) # 指定vmlinux文件
perf top --vmlinux /path/to/vmlinux # 同-k
-M, --disassembler-style <disassembler style>
作用: 指定反汇编器风格
perf top -M intel # 使用Intel语法反汇编
perf top -M att # 使用AT&T语法反汇编(默认)
perf top --disassembler-style intel # 同-M
-m, --mmap-pages <pages>
作用: mmap数据页数
perf top -m 256 # 使用256页缓冲区
perf top --mmap-pages 512 # 使用512页缓冲区
perf top -m 16K # 使用16KB缓冲区
-n, --show-nr-samples
作用: 显示采样数列
perf top -n # 显示采样数
perf top --show-nr-samples # 同-n
-p, --pid <pid>
作用: 监控现有进程ID的事件
perf top -p 1234 # 监控PID 1234
perf top -p 1234,5678 # 监控多个PID
perf top --pid $(pgrep nginx) # 监控nginx进程
-r, --realtime <n>
作用: 使用指定的RT SCHED_FIFO优先级收集数据
perf top -r 99 # 使用RT优先级99
perf top --realtime 80 # 使用RT优先级80
-s, --sort <key[,key2...]>
作用: 按指定键排序
perf top -s comm # 按进程名排序
perf top -s dso,symbol # 按DSO和符号排序
perf top -s pid,comm,dso,symbol # 多字段排序
# 可用排序键:
# pid, tid, comm, dso, symbol, parent, cpu, srcline,
# weight, local_weight, period, period_sys, period_us,
# period_guest_sys, period_guest_us, samples, sample,
# ip, time, addr, simd, type, typeoff, retired, latency
-t, --tid <tid>
作用: 监控现有线程ID的事件
perf top -t 1235 # 监控线程TID 1235
perf top -t 1235,1236 # 监控多个线程
-U, --hide_user_symbols
作用: 隐藏用户空间符号
perf top -U # 只显示内核空间符号
perf top --hide_user_symbols # 同-U
-u, --uid <user>
作用: 要监控的用户
perf top -u root # 监控root用户
perf top -u 1000 # 监控UID 1000的用户
perf top -u user1,user2 # 监控多个用户
-v, --verbose
作用: 更详细的输出(显示计数器打开错误等)
perf top -v # 详细模式
perf top -vv # 更详细
perf top -vvv # 最详细
perf top --verbose # 同-v
-w, --column-widths <width[,width...]>
作用: 不调整列宽,使用这些固定值
perf top -w 10,30,20 # 设置列宽为10,30,20
perf top --column-widths 15,40,25 # 设置列宽为15,40,25
-z, --zero
作用: 更新时清零历史记录
perf top -z # 每次更新都从零开始
perf top --zero # 同-z
2. 高级选项
--asm-raw
作用: 显示汇编指令的原始编码(默认)
perf top --asm-raw # 显示原始汇编编码
--call-graph <record_mode[,record_size],print_type,threshold[,print_limit],order,sort_key[,branch]>
作用: 设置并启用调用图(堆栈链/回溯)
# 完整格式:record_mode[,record_size],print_type,threshold[,print_limit],order,sort_key[,branch]
perf top --call-graph fp,graph,0.5,caller,function
perf top --call-graph dwarf,8192,graph,1.0,callee,address
perf top --call-graph lbr,fractal,0.1,10,caller,function,branch
# 参数详解:
# record_mode: 记录模式 (fp|dwarf|lbr)
# record_size: 如果record_mode是'dwarf',堆栈记录的最大大小(字节),默认:8192
# print_type: 调用图打印风格 (graph|flat|fractal|folded|none)
# threshold: 调用图包含的最小阈值(百分比)
# print_limit: 调用图条目的最大数量
# order: 调用图顺序 (caller|callee)
# sort_key: 调用图排序键 (function|address)
# branch: 将最后分支信息包含到调用图中 (branch)
# value: 调用图值 (percent|period|count)
--children
作用: 累积子函数的调用链并显示总开销
perf top --children # 显示子函数累积开销
--comms <comm[,comm...]>
作用: 只考虑这些进程中的符号
perf top --comms nginx # 只显示nginx进程的符号
perf top --comms nginx,httpd # 只显示nginx和httpd的符号
--demangle-kernel
作用: 启用内核符号反修饰
perf top --demangle-kernel # 内核符号反修饰
--dsos <dso[,dso...]>
作用: 只考虑这些DSO(动态共享对象)中的符号
perf top --dsos libc.so.6 # 只显示libc中的符号
perf top --dsos libc.so.6,libpthread.so.0 # 只显示多个库中的符号
--fields <key[,keys...]>
作用: 输出字段:overhead, period, sample 加上所有排序键
perf top --fields overhead,symbol,dso
perf top --fields overhead,comm,pid,symbol
--force
作用: 不抱怨,直接执行
perf top --force # 强制执行,不显示警告
--group
作用: 将计数器放入计数器组
perf top --group # 启用计数器分组
--hierarchy
作用: 以层次结构显示条目
perf top --hierarchy # 层次化显示
--ignore-callees <regex>
作用: 在调用图中忽略这些函数的被调用者
perf top --ignore-callees '^__' # 忽略以__开头的函数的被调用者
perf top --ignore-callees '^_?malloc' # 忽略malloc相关函数的被调用者
--ignore-vmlinux
作用: 即使找到vmlinux也不加载
perf top --ignore-vmlinux # 不加载vmlinux
--kallsyms <file>
作用: 指定kallsyms文件路径
perf top --kallsyms /proc/kallsyms # 指定kallsyms文件(默认)
--max-stack <n>
作用: 设置解析调用链时的最大堆栈深度。默认:kernel.perf_event_max_stack 或 127
perf top --max-stack 64 # 最大堆栈深度64
perf top --max-stack 256 # 最大堆栈深度256
--num-thread-synthesize <n>
作用: 运行事件合成的线程数
perf top --num-thread-synthesize 4 # 使用4个线程进行事件合成
--objdump <path>
作用: 用于反汇编和注解的objdump二进制文件
perf top --objdump /usr/bin/objdump # 指定objdump路径
--overwrite
作用: 使用后向环形缓冲区,默认:否
perf top --overwrite # 启用覆盖模式
--percent-limit <percent>
作用: 不显示低于此百分比的条目
perf top --percent-limit 1 # 只显示1%以上的条目
perf top --percent-limit 0.5 # 只显示0.5%以上的条目
--percentage <relative|absolute>
作用: 如何显示过滤条目的百分比
perf top --percentage relative # 相对百分比(默认)
perf top --percentage absolute # 绝对百分比
--proc-map-timeout <n>
作用: 每个线程处理proc mmap的超时时间(毫秒)
perf top --proc-map-timeout 1000 # 超时时间1秒
--raw-trace
作用: 显示原始跟踪事件输出(不使用print fmt或插件)
perf top --raw-trace # 显示原始跟踪
--show-total-period
作用: 显示总周期数列
perf top --show-total-period # 显示总周期数
--source
作用: 将源代码与汇编代码交错显示(默认)
perf top --source # 显示源代码
--stdio
作用: 使用stdio界面
perf top --stdio # 使用非交互式文本输出
perf top -b --stdio # 批处理模式+文本输出
--sym-annotate <symbol name>
作用: 要注解的符号
perf top --sym-annotate malloc # 注解malloc函数
--symbols <symbol[,symbol...]>
作用: 只考虑这些符号
perf top --symbols malloc # 只显示malloc符号
perf top --symbols malloc,free # 只显示malloc和free符号
--tui
作用: 使用TUI界面
perf top --tui # 使用文本用户界面(默认)
3. 实用示例
示例1:标准系统级监控
sudo perf top -a -g -d 1 --percent-limit 0.5
示例2:监控特定进程
sudo perf top -p $(pgrep nginx) -g dwarf --stdio
示例3:批处理模式生成报告
sudo perf top -b -n 1 -a -g --percent-limit 0.1 --stdio > top_report.txt
示例4:高级调用图配置
sudo perf top --call-graph dwarf,16384,graph,0.5,10,caller,function -a
示例5:过滤特定符号
sudo perf top --symbols malloc,free,calloc --dsos libc.so.6 -a
示例6:内存访问分析
sudo perf top -e cache-misses --mem-mode load --sort dso,symbol
这些参数可以根据具体需求灵活组合使用。记住,大多数perf top命令需要root权限才能访问所有性能计数器。

浙公网安备 33010602011771号