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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM