大話火焰圖(flame graph)

weixin_33752045發表於2019-01-21

火焰圖是什麼

就是下圖展示的圖形

某PHP程式的On-CPU型別的火焰圖例子
簡而言之,就是這個圖形看起來像一團跳動的火焰,這也正是名字的由來.

火焰圖的作用

火焰圖(flame graph)用於分析效能

火焰圖該怎麼看

火焰圖關注哪幾個部分

  • 顏色本身沒有什麼意義
  • 縱向表示呼叫棧的深度
  • 橫向表示消耗的時間

上述幾個部分分別體現什麼

橫向來看

  • 由於橫向表示消耗的時間,所以一個格子的寬度越大越說明其可能是瓶頸

縱向來看

  • 由於縱向表示呼叫棧的深度,所以火焰的火苗尖部就是CPU正在執行的操作

綜上

  • 主要看那些比較寬大的火苗
  • 特別是那些平頭的火苗

如何生成火焰圖

  • 首先要有一個Tracer工具
  • Linux的Tracer工具

    • (常用)perf工具,參考Linux Profiling at Netflix的介紹
    • systemtap,相對更強大,缺點是要學習該工具的程式語言

常見火焰圖型別

常見的火焰圖型別有 On-CPUOff-CPU,還有 Memory,Hot/Cold,Differential 等等

什麼時候使用On-CPU,什麼時候使用Off-CPU?

  • 如果是CPU則使用On-CPU火焰圖
  • 如果是IO或鎖則使用Off-CPU火焰圖
  • 不確定該怎麼辦

    1. 使用壓測工具看看能否讓CPU使用率趨於飽和
    2. 如果不管怎麼壓,CPU使用率始終上不來,那麼很大可能是IO或鎖出問題了,此時應該用Off-CPU火焰圖,否則用On-CPU
  • 還是不確定該怎麼辦

    • 都搞搞
    • 正常情況下兩張圖的差異是比較大的
    • 如果差異不大,那麼有可能是CPU被其他程式搶了

參考

Blazing Performance with Flame Graphs
白話火焰圖
如何讀懂火焰圖

相關文章