聚焦火焰圖

當您使用「Focus」(聚焦) 篩選器時,只要選取一個「函式」,火焰圖就會顯示傳入和傳出該特定函式的程式碼路徑。您可以使用聚焦圖表執行以下兩種常見工作:

  1. 針對從多個位置呼叫的指定函式,分析函式的匯總資源使用率。
  2. 為函式的不同呼叫者分析函式花用的時間比例。

舉例來說,您要如何利用標準火焰圖來分析 Sort 函式的資源使用率?

火焰圖中的 sort 函式。

在下一節中,我們將圖表聚焦在 Sort 並回答這個問題。本頁上的火焰圖是由色彩模式相較於建構,分別設定成名稱的預設值。

聚焦圖表說明

依據「Focus」(聚焦) 篩選器產生的圖表可有效為指定函式建立兩個火焰圖,並將這兩個火焰圖彙整在一起:

聚焦於 sort 函式的火焰圖。

在上方圖表中,系統是以完整寬度和醒目顯示 Sort 函式對應的框架。框架內的文字包括函式名稱、百分比和用於分析的剖析資料數量。就這個範例而言,您可以從指標瞭解 Sort 函式總共耗用了 8.85% 的 CPU 作業時間。

上方圖表的下半部是一張以 Sort 函式為起始點的標準火焰圖,用於顯示這個函式的所有受呼叫者。如果您想使用標準火焰圖來建立這個部分,請使用「Show from frame」(以框架為條件顯示) 篩選器:

顯示 sort 函式的受呼叫者的火焰圖底部。

上方圖表的上半部顯示 Sort 的呼叫者,並且隱藏了受呼叫者。您可以使用以下一系列的篩選器,建立與這部分相似的圖表。首先,為 Sort 新增「Show stacks」篩選器。接著針對 Sort 呼叫的每個函式,新增「Hide stacks」或「Hide frames」。在這種情況下,您必須針對 quickSort 新增「Hide stacks」,以消除這個函式及其子項,再針對 LenmaxDepth 新增「Hide frames」

顯示 sort 函式的呼叫者的火焰圖頂端。

只要使用這些篩選器,您便可從與聚焦圖表上半部類似的圖表中看出,Sort 函式通過了各種不同的呼叫堆疊。不過,這些指標並未彙整在一起,因此您無法從火焰圖得知 Sort 的整體指標用量。

將聚焦圖表與僅結合上述兩張近似圖的圖表相比,可發現以下幾個不同之處:

  • 聚焦函式 Sort 只有一個框架。
  • 系統會以完整寬度醒目顯示聚焦函式框架,並顯示彙整所有呼叫堆疊的指標。
  • 圖表上會以 root 框架為起始點,顯示多個呼叫堆疊,方便您查看完整的呼叫堆疊。

選取框架

如果您在聚焦圖表中選取框架,系統就會重新繪製火焰圖,並且顯示該框架呼叫堆疊的更多細節。如果透過多重呼叫堆疊完成框架,即會顯示所有呼叫堆疊,不包含框架的呼叫堆疊則無法看到。如要將圖還原為原始狀態,請選取對應於聚焦功能的框架。

在前一個範例中,Sort(*byFreq).sort(*byLiteral).sort 呼叫。如要查看 (*byLiteral).sort 中呼叫堆疊的詳情,請選取該框架。您可以選取另一個框架,進一步修正顯示的呼叫堆疊:

針對 sort 函式展開的火焰圖。

如要將聚焦的火焰圖還原為原始樣貌,請選取顯示「Focus」(聚焦) 篩選器值的框架。在這種情況下,請選取標有 Sort 的灰色框架。請注意,如要將標準火焰圖還原為原始狀態,請選取根框架。

分析圖表

如要分析聚焦火焰圖,請使用與分析標準火焰圖相同的控制項和篩選器。不過,圖表與指標的互動方式有所不同:

  • 如果游標懸停在框架上,工具提示會顯示指標資料。標準火焰圖會顯示框架的總指標資料。在聚焦火焰圖中,系統會顯示函式的匯總指標資料。

  • 如果您選取框架,系統就會重新繪製火焰圖,使該框架以完整寬度顯示。如要將標準火焰圖還原為原始形式,您必須選取頂端框架。如要將聚焦的火焰圖還原為原始形式,您必須選取顯示焦點篩選器值的框架。

如要瞭解比較剖析資料時聚焦圖表的資訊,請參閱「聚焦比較」一節。

設定聚焦篩選器

您可以使用不同的方法設定聚焦篩選器,但產生的圖表並無不同之處。

使用圖表

將滑鼠游標放在要查看的框架上,然後從框架工具提示中選取「Focus」(聚焦)。系統就會從框架中擷取聚焦函式。在這個範例中,根據 (*huffmanBitWriter).write 函式展開的火焰圖會顯示三個不同的呼叫堆疊:

聚焦於極小框架的火焰圖。

使用聚焦清單

如要讓火焰圖聚焦在特定函式,請按照下列步驟操作:

  1. 按一下「List」圖示 ,開啟「Select focus function」資料表。
  2. 從表格中選取函式名稱,或針對特定函式按一下「Actions」圖示 ,然後選取「Focus」

「Select focus function」(選取聚焦函式) 資料表。

如果您選取的函式可從不同的呼叫堆疊進行呼叫,則每個呼叫堆疊都會顯示在火焰圖中。

選取表格標題元素,即可遞增 或遞減 排序資料表列。資料表中的每一列都會顯示函式名稱,以及與該函式執行作業相關的統計資料。這個資料表指出 (*compressor).deflate 函式的執行時間需要 2.78 秒,其中有 1.8 秒用於函式本身,其餘時間則用於函式的呼叫堆疊。百分比欄指出總執行時間中的 57% 用於函式 (*compressor).deflate。另一個欄指出,89% 的時間都用於執行 (*compressor).deflate 或其呼叫堆疊中的函式。最後,計數欄則指出有三個序列叫用了 (*compressor).deflate 函式。

比較剖析資料時,聚焦清單的內容是不同的。詳情請參閱「聚焦比較」。

使用篩選列

按一下篩選列中的灰色文字「Add profile data filter」,然後輸入 Focus: 以及用來指示要聚焦哪個函式的字串。您可以使用子字串 (包含套件前置詞) 或全名。如果您提供的字串模稜兩可,則系統會選取最符合比對的函式。

如有需要,您可按一下 [Filters] (篩選器) 並選取 [Focus] (聚焦),然後輸入識別字串。

如果您選取的函式可從不同的呼叫堆疊進行呼叫,則每個呼叫堆疊都會顯示在火焰圖中。

移除聚焦篩選器

如要移除聚焦篩選器,請按一下篩選器上的「關閉」圖示

後續步驟