火焰圖
Cloud Profiler 會使用火焰圖顯示剖析資料。與樹狀圖和圖表不同,火焰圖以簡潔易讀的格式呈現大量資訊,因此可有效運用螢幕空間。
為了介紹火焰圖,本頁會說明如何將樹狀圖轉換為火焰圖,並簡要說明火焰圖的主要功能。
建立火焰圖
如要從樹狀圖建立火焰圖,請完成下圖所示步驟:
從樹狀圖中移除表示函式呼叫的箭頭。
將每個樹狀結構節點替換為畫格。
影格為矩形,且所有影格高度相同。以本頁範例來說,畫格中所命名函式使用的 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 接下來,請移除畫面之間的垂直間距,並保留呼叫序列,同時將畫面左對齊。您可以選擇定義色彩配置,並根據定義為影格著色。舉例來說,您可以依包裝、總 CPU 時間、自我 CPU 時間或其他指標為影格著色。
移除多餘的空白並依 CPU 時間為影格著色後,火焰圖現在會顯示如下:
請注意,即使以
foo2
開頭的呼叫堆疊現在位於foo1
影格的旁邊,foo1
和foo2
的呼叫堆疊仍會保留。
摘要
以下簡單範例說明以下內容:
- 火焰圖是樹狀結構的簡潔表示法,您可以從上到下追蹤影格,重新建立呼叫堆疊。
- 框架會命名函式,而框架寬度則是該函式總 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 總時間。