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

#生成文件使用浏览器打开即可正常查看

参考:https://www.shuzhiduo.com/A/WpdKrb1m5V/

posted on 2022-03-16 17:00  柴米油盐酱醋  阅读(991)  评论(0编辑  收藏  举报

导航