火焰圖是什麼
就是下圖展示的圖形
簡而言之,就是這個圖形看起來像一團跳動的火焰,這也正是名字的由來.
火焰圖的作用
火焰圖(flame graph)用於分析效能
火焰圖該怎麼看
火焰圖關注哪幾個部分
- 顏色本身沒有什麼意義
- 縱向表示呼叫棧的深度
- 橫向表示消耗的時間
上述幾個部分分別體現什麼
橫向來看
- 由於橫向表示消耗的時間,所以一個格子的寬度越大越說明其可能是瓶頸
縱向來看
- 由於縱向表示呼叫棧的深度,所以火焰的火苗尖部就是CPU正在執行的操作
綜上
- 主要看那些比較寬大的火苗
- 特別是那些平頭的火苗
如何生成火焰圖
- 首先要有一個Tracer工具
-
Linux的Tracer工具
- (常用)perf工具,參考Linux Profiling at Netflix的介紹
- systemtap,相對更強大,缺點是要學習該工具的程式語言
常見火焰圖型別
常見的火焰圖型別有 On-CPU,Off-CPU,還有 Memory,Hot/Cold,Differential 等等
什麼時候使用On-CPU,什麼時候使用Off-CPU?
- 如果是CPU則使用On-CPU火焰圖
- 如果是IO或鎖則使用Off-CPU火焰圖
-
不確定該怎麼辦
- 使用壓測工具看看能否讓CPU使用率趨於飽和
- 如果不管怎麼壓,CPU使用率始終上不來,那麼很大可能是IO或鎖出問題了,此時應該用Off-CPU火焰圖,否則用On-CPU
-
還是不確定該怎麼辦
- 都搞搞
- 正常情況下兩張圖的差異是比較大的
- 如果差異不大,那麼有可能是CPU被其他程式搶了