聚焦火焰圖
當您使用「Focus」(聚焦) 篩選器時,只要選取一個「函式」,火焰圖就會顯示傳入和傳出該特定函式的程式碼路徑。您可以使用聚焦圖表執行以下兩種常見工作:
- 針對從多個位置呼叫的指定函式,分析函式的匯總資源使用率。
- 為函式的不同呼叫者分析函式花用的時間比例。
舉例來說,您要如何利用標準火焰圖來分析 Sort
函式的資源使用率?
在下一節中,我們將圖表聚焦在 Sort
並回答這個問題。本頁上的火焰圖是由色彩模式和相較於建構,分別設定成名稱和無的預設值。
聚焦圖表說明
依據「Focus」(聚焦) 篩選器產生的圖表可有效為指定函式建立兩個火焰圖,並將這兩個火焰圖彙整在一起:
在上方圖表中,系統是以完整寬度和醒目顯示 Sort
函式對應的框架。框架內的文字包括函式名稱、百分比和用於分析的剖析資料數量。就這個範例而言,您可以從指標瞭解 Sort
函式總共耗用了 8.85% 的 CPU 作業時間。
上方圖表的下半部是一張以 Sort
函式為起始點的標準火焰圖,用於顯示這個函式的所有受呼叫者。如果您想使用標準火焰圖來建立這個部分,請使用「Show from frame」(以框架為條件顯示) 篩選器:
上方圖表的上半部顯示 Sort
的呼叫者,並且隱藏了受呼叫者。您可以使用以下一系列的篩選器,建立與這部分相似的圖表。首先,為 Sort
新增「Show stacks」篩選器。接著針對 Sort
呼叫的每個函式,新增「Hide stacks」或「Hide frames」。在這種情況下,您必須針對 quickSort
新增「Hide stacks」,以消除這個函式及其子項,再針對 Len
和 maxDepth
新增「Hide frames」:
只要使用這些篩選器,您便可從與聚焦圖表上半部類似的圖表中看出,Sort
函式通過了各種不同的呼叫堆疊。不過,這些指標並未彙整在一起,因此您無法從火焰圖得知 Sort
的整體指標用量。
將聚焦圖表與僅結合上述兩張近似圖的圖表相比,可發現以下幾個不同之處:
- 聚焦函式
Sort
只有一個框架。 - 系統會以完整寬度醒目顯示聚焦函式框架,並顯示彙整所有呼叫堆疊的指標。
- 圖表上會以
root
框架為起始點,顯示多個呼叫堆疊,方便您查看完整的呼叫堆疊。
選取框架
如果您在聚焦圖表中選取框架,系統就會重新繪製火焰圖,並且顯示該框架呼叫堆疊的更多細節。如果透過多重呼叫堆疊完成框架,即會顯示所有呼叫堆疊,不包含框架的呼叫堆疊則無法看到。如要將圖還原為原始狀態,請選取對應於聚焦功能的框架。
在前一個範例中,Sort
由 (*byFreq).sort
和 (*byLiteral).sort
呼叫。如要查看 (*byLiteral).sort
中呼叫堆疊的詳情,請選取該框架。您可以選取另一個框架,進一步修正顯示的呼叫堆疊:
如要將聚焦的火焰圖還原為原始樣貌,請選取顯示「Focus」(聚焦) 篩選器值的框架。在這種情況下,請選取標有 Sort
的灰色框架。請注意,如要將標準火焰圖還原為原始狀態,請選取根框架。
分析圖表
如要分析聚焦火焰圖,請使用與分析標準火焰圖相同的控制項和篩選器。不過,圖表與指標的互動方式有所不同:
如果游標懸停在框架上,工具提示會顯示指標資料。標準火焰圖會顯示框架的總指標資料。在聚焦火焰圖中,系統會顯示函式的匯總指標資料。
如果您選取框架,系統就會重新繪製火焰圖,使該框架以完整寬度顯示。如要將標準火焰圖還原為原始形式,您必須選取頂端框架。如要將聚焦的火焰圖還原為原始形式,您必須選取顯示焦點篩選器值的框架。
如要瞭解比較剖析資料時聚焦圖表的資訊,請參閱「聚焦比較」一節。
設定聚焦篩選器
您可以使用不同的方法設定聚焦篩選器,但產生的圖表並無不同之處。
使用圖表
將滑鼠游標放在要查看的框架上,然後從框架工具提示中選取「Focus」(聚焦)。系統就會從框架中擷取聚焦函式。在這個範例中,根據 (*huffmanBitWriter).write
函式展開的火焰圖會顯示三個不同的呼叫堆疊:
使用聚焦清單
如要讓火焰圖聚焦在特定函式,請按照下列步驟操作:
- 按一下「List」圖示 list,開啟「Select focus function」資料表。
- 從表格中選取函式名稱,或針對特定函式按一下「Actions」圖示 more_vert,然後選取「Focus」:
如果您選取的函式可從不同的呼叫堆疊進行呼叫,則每個呼叫堆疊都會顯示在火焰圖中。
選取表格標題元素,即可遞增 arrow_upward 或遞減 arrow_downward 排序資料表列。資料表中的每一列都會顯示函式名稱,以及與該函式執行作業相關的統計資料。這個資料表指出 (*compressor).deflate
函式的執行時間需要 2.78 秒,其中有 1.8 秒用於函式本身,其餘時間則用於函式的呼叫堆疊。百分比欄指出總執行時間中的 57% 用於函式 (*compressor).deflate
。另一個欄指出,89% 的時間都用於執行 (*compressor).deflate
或其呼叫堆疊中的函式。最後,計數欄則指出有三個序列叫用了 (*compressor).deflate
函式。
比較剖析資料時,聚焦清單的內容是不同的。詳情請參閱「聚焦比較」。
使用篩選列
按一下篩選列中的灰色文字「Add profile data filter」,然後輸入 Focus:
以及用來指示要聚焦哪個函式的字串。您可以使用子字串 (包含套件前置詞) 或全名。如果您提供的字串模稜兩可,則系統會選取最符合比對的函式。
如有需要,您可按一下 [Filters] (篩選器) 並選取 [Focus] (聚焦),然後輸入識別字串。
如果您選取的函式可從不同的呼叫堆疊進行呼叫,則每個呼叫堆疊都會顯示在火焰圖中。
移除聚焦篩選器
如要移除聚焦篩選器,請按一下篩選器上的「關閉」圖示 close。