perf 命令
perf 命令是一款Linux系统性能分析工具,能够进行函数级热点查找
常用的有 perf top 、perf record 、 perf report
1、perf top 命令使用
常用参数
-e:指定性能事件
-a:显示在所有CPU上的性能统计信息
-C:显示在指定CPU上的性能统计信息
-p:指定进程PID
-t:指定线程TID
-K:隐藏内核统计信息
-U:隐藏用户空间的统计信息
-s:指定待解析的符号信息
‐g or ‐‐call‐graph <output_type,min_percent,call_order>
graph: 使用调用树,将每条调用路径进一步折叠。这种显示方式更加直观。
每条调用路径的采样率为绝对值。也就是该条路径占整个采样域的比率。
fractal
默认选项。类似与 graph,但是每条路径前的采样率为相对值。
flat
不折叠各条调用
选项 call_order 用以设定调用图谱的显示顺序,该选项有 2个取值,分别是
callee 与caller。
将该选项设为callee 时,perf按照被调用的顺序显示调用图谱,上层函数被下层函数所调用。
该选项被设为caller 时,按照调用顺序显示调用图谱,即上层函数调用了下层函数路径,也不显示每条调用路径的采样率
1.1 示例、 内容会实时刷新,但这样查看当前结果并不会进行保存
perf top -a -g -p `pidof mysqld`
+ 75.80% 0.02% mysqld [.] handle_connection
- 75.63% 0.24% mysqld [.] do_command
- 28.39% do_command
+ 26.39% dispatch_command
- 2.27% Protocol_classic::get_command
- 2.17% Protocol_classic::read_packet
- 2.17% my_net_read
+ 2.23% net_read_packet
+ 68.98% 0.59% mysqld [.] dispatch_command
+ 64.29% 0.06% mysqld [.] mysqld_stmt_execute
+ 63.52% 0.20% mysqld [.] Prepared_statement::execute_loop
+ 61.90% 0.11% mysqld [.] Prepared_statement::execute
+ 60.04% 0.29% mysqld [.] mysql_execute_command
+ 38.38% 0.11% mysqld [.] execute_sqlcom_select
+ 33.61% 0.05% mysqld [.] handle_query
+ 32.14% 0.00% libpthread-2.17.so [.] start_thread
+ 27.92% 0.00% mysqld [.] pfs_spawn_thread
+ 25.31% 0.12% [kernel] [k] do_syscall_64
+ 15.84% 0.07% mysqld [.] st_select_lex::optimize
+ 15.53% 0.23% mysqld [.] JOIN::optimize
+ 15.36% 0.49% mysqld [.] btr_cur_search_to_nth_level
+ 15.03% 0.06% mysqld [.] JOIN::exec
+ 12.84% 0.11% mysqld [.] JOIN::make_join_plan
+ 12.80% 0.78% mysqld [.] buf_page_get_gen
+ 11.94% 0.06% mysqld [.] sub_select
+ 9.44% 0.06% mysqld [.] buf_read_page_low
+ 9.32% 0.00% [kernel] [k] entry_SYSCALL_64_after_hwframe
+ 8.82% 0.72% mysqld [.] row_search_mvcc
+ 8.79% 0.08% mysqld [.] fil_io
+ 8.19% 0.03% mysqld [.] buf_read_page
+ 8.18% 0.00% mysqld [.] Sql_cmd_update::execute
+ 8.01% 0.01% mysqld [.] handler::ha_write_row
+ 7.75% 0.11% mysqld [.] ha_innobase::index_read
+ 7.69% 0.01% mysqld [.] Sql_cmd_update::try_single_table_update
+ 7.24% 0.02% mysqld [.] open_tables_for_query
+ 7.17% 0.12% libpthread-2.17.so [.] __libc_send
+ 7.13% 0.13% mysqld [.] open_tables
+ 7.04% 0.11% mysqld [.] evaluate_join_record
#### 1.2 示例、perf record/perf report perf record 可以将分析信息保存到文件 perf report 可以查看文件中的性能信息
例:将性能分析结果输出到 data.perf 文件中
perf record -a -g -p `pidof mysqld` -o data.perf
例:读取 data.perf 文件
perf report -g -i data.perf
2、利用 data.perf 性能文件,生成火焰图
git hub:https://github.com/brendangregg/FlameGraph.git
perf script -i perf.data > perf.unfold
cd FlameGraph
./stackcollapse-perf.pl /root/perf.unfold &> perf.folded
./flamegraph.pl perf.folded > perf.svg
#生成文件使用浏览器打开即可正常查看
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏