火焰圖

Cloud Profiler 會使用火焰圖顯示剖析資料。與樹狀圖和圖表不同,火焰圖以簡潔易讀的格式呈現大量資訊,因此可有效運用螢幕空間。

為了介紹火焰圖,本頁會說明如何將樹狀圖轉換為火焰圖,並簡要說明火焰圖的主要功能。

建立火焰圖

如要從樹狀圖建立火焰圖,請完成下圖所示步驟:

建立火焰圖。

  1. 從樹狀圖中移除表示函式呼叫的箭頭。

  2. 將每個樹狀結構節點替換為畫格

    影格為矩形,且所有影格高度相同。以本頁範例來說,畫格中所命名函式使用的 CPU 作業時間總計,會決定畫格寬度。

    下表說明各函式的擬似程式碼。在函式執行期間執行的 CPU 密集工作會定義自我 CPU 作業時間:

    函式虛擬程式碼 自身 CPU 時間
    (秒)
    總 CPU 時間
    (秒)
    func main():
         foo1()
         foo2()
         // CPU intensive work
         // for 2 seconds 
    2 4 + 3 + 2 = 9
    func foo1():
         bar()
         // CPU intensive work
         // for 1.5 seconds 
    1.5 2.5 + 1.5 = 4
    func foo2():
         bar()
         // CPU intensive work
         // for 0.5 seconds 
    0.5 2.5 + 0.5 = 3
    func bar():
         // CPU intensive work
         // for 2.5 seconds
    2.5 2.5

  3. 接下來,請移除畫面之間的垂直間距,並保留呼叫序列,同時將畫面左對齊。您可以選擇定義色彩配置,並根據定義為影格著色。舉例來說,您可以依包裝、總 CPU 時間、自我 CPU 時間或其他指標為影格著色。

    移除多餘的空白並依 CPU 時間為影格著色後,火焰圖現在會顯示如下:

    火焰圖的細部圖片。

    請注意,即使以 foo2 開頭的呼叫堆疊現在位於 foo1 影格的旁邊,foo1foo2 的呼叫堆疊仍會保留。

摘要

以下簡單範例說明以下內容:

  • 火焰圖是樹狀結構的簡潔表示法,您可以從上到下追蹤影格,重新建立呼叫堆疊。
  • 框架會命名函式,而框架寬度則是該函式總 CPU 作業時間的相對測量值。在這個範例中,由於 foo2 的 CPU 總時間是 main 的三分之一,因此 foo2 的畫面寬度是 main 的三分之一。
  • 影格下方空白區域的寬度,是影格中所述函式自我 CPU 時間的相對測量值。舉例來說,在框架 foo1 下方,有 1.5 個單位是空白的,而 2.5 個單位由 bar 佔用。因此,foo1 的 CPU 自我時間為其 CPU 總時間的 37.5%,即 1.5 秒。
  • 隨著您追蹤呼叫堆疊,影格寬度會減少,因為呼叫目標的 CPU 總時間絕不會超過呼叫端的 CPU 總時間。這就是產生火焰形狀的原因。

    在這個範例中,foo1 會呼叫 bar,而 foo1 的 CPU 總時間定義為 bar 的 CPU 總時間加上 foo1 的自我 CPU 時間。因此,bar 的 CPU 總時間不得超過 foo1 的 CPU 總時間。

後續步驟