篩選火焰圖

您可以透過 Cloud Profiler 新增篩選器,控制所選設定檔中顯示的資訊。舉例來說,您可以新增篩選器來隱藏特定影格或呼叫堆疊。新增和移除篩選器不會變更所選剖析資料的組合。

每個篩選器皆由預先定義的 FILTER-OPTION 搭配使用者定義的 VALUE 來指定:

[FILTER-OPTION] : [VALUE]

每個新增的篩選器都會顯示在篩選條件列上。以下範例的篩選器顯示 Metric : Bytes

顯示篩選器,其中包含位元組的指標和值選項。

Profiler 會根據您選取的剖析資料類型,自動建立 FILTER-OPTIONMetricVALUE 的篩選器,有些剖析資料類型可以變更 VALUE,您無法移除這個篩選器。

如要新增篩選器,請使用下列其中一種方法:

  • 按一下「Filters」圖示 ,從清單中選取選項並輸入值。
  • 按一下篩選列中的灰色字 [Add profile data filter] (新增剖析資料篩選器),然後輸入篩選器選項和值。
  • 如要使用「Focus」(聚焦)、「Show from frame」(以框架為條件顯示) 和「Show stacks」(顯示堆疊) 篩選器選項,您也可以將滑鼠指標放在框架上,然後從框架工具提示中選取任一選項。

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

準備要顯示的資料時,Profiler 會搜尋框架與篩選器之間的相符項目。如有相符項目,Profiler 就會使用 FILTER-OPTION 來決定該執行什麼動作。只要框架函式名稱或函式來源檔案名稱包含 VALUE,框架就會「符合」該篩選器的條件。系統會執行區分大小寫的比較作業。舉例來說,如果篩選器是 Hide frames : oo,則火焰圖就不會呈現函式名稱為 foofoo1busyloop 的框架。

指標

如要設定剖析資料類型匯總模式,請使用「Metric」(指標) 篩選器。舉例來說,如果您選取「Heap」剖析資料類型,則您可選擇要以「Bytes」和「Objects」來視覺化呈現資料。

「Metric」(指標) 篩選器可用的選擇取決於程式設計語言及您選取的「Profile type」(剖析資料類型)

  • 如果是「CPU time」(CPU 時間) 剖析資料,則唯一可用的選項是 [CPU time] (CPU 時間)
  • 如果是「Heap」(堆積) 剖析資料,則可用選項包括:

    • 位元組
    • 物件
  • 如果是「Allocated Heap」(分配的堆積) 剖析資料,則可用選項包括:

    • 總分配位元組
    • 總分配物件
  • 如果是「Wall time」(實際時間) 剖析資料,則可用選項包括:

    • 數量
    • 實際時間
  • 如果是「Threads」(執行緒) 剖析資料,則唯一可用的選項是 [Goroutine]

  • 如果是「Contention」(爭用情況) 剖析資料,則可用選項包括:

    • 延遲
    • Contentions

如要進一步瞭解剖析指標的類型,請參閱剖析概念

下例的螢幕擷圖顯示了某程式的 CPU 使用情況:

CPU 使用率的 Profiler 圖表

您可以從這裡看到 busyloop 常式呼叫了 foo1foo2,而這兩者都會呼叫數種其他常式。您可以新增篩選器進一步限制圖表,使其只顯示您想查看的資料。

聚焦

當您使用「Focus」(聚焦) 篩選器時,只要選取一個「函式」,火焰圖就會顯示傳入和傳出該特定函式的程式碼路徑。

如要進一步瞭解如何聚焦圖表及解讀結果,請參閱「聚焦火焰圖」一文。

顯示堆疊

如要顯示所有包含特定框架 (符合篩選器值) 的呼叫堆疊,請使用「Show stacks」(顯示堆疊) 篩選器。圖表將顯示函式的呼叫者和受呼叫者,也就是呼叫比對函式的所有項目,以及呼叫的所有項目。

這個篩選器會執行區分大小寫的子字串測試。如果框架函式包含篩選器值,就會發生比對。

如要將上述範例的 CPU 使用率圖表限制為只顯示涵蓋函式 foo1 的呼叫堆疊,請為 foo1 設定「Show stacks」(顯示堆疊) 篩選器:

使用「show stacks」(顯示堆疊) 篩選 CPU 使用率的 Profiler 圖表

隱藏堆疊

隱藏所有包含符合篩選器值之特定框架的呼叫堆疊。當您想要隱藏不需要的堆疊時,這個篩選器通常相當實用。舉例來說,在 Java 應用程式中,加入 Hide stacks: unsafe.park 篩選器是很常見的做法。

這個篩選器會執行區分大小寫的子字串測試。如果框架函式包含篩選器值,就會發生比對。

以框架為條件顯示

如要顯示框架為符合特定篩選器值開始的所有呼叫堆疊,並隱藏所有其他呼叫堆疊,請使用「Show from frame」(以框架為條件顯示) 篩選器。以此條件篩選的圖表將顯示從已命名函式之後的呼叫堆疊。如果您從多個位置呼叫函式,而您想要查看歸因該函式的總使用量,就很適合選用這個篩選器。

舉例來說,如果您只要顯示源自 baz 函式的呼叫,請為 baz 設定「Show from frame」(以框架為條件顯示) 篩選器:

使用「以框架為條件顯示」篩選 CPU 使用率的 Profiler 圖表

這個篩選器會執行區分大小寫的子字串測試。如果框架函式包含篩選器值,就會發生比對。

隱藏框架

如要隱藏符合特定篩選器值的所有框架,使其不會顯示,請使用「Hide frames」(隱藏框架) 篩選器。圖表將顯示函式的呼叫者,而函式的所有受呼叫者將集合顯示。想要從圖表中移除不相關的框架時,就很適合使用這個篩選器。

舉例來說,如要隱藏 foo1foo2 的框架,請針對 foo 設定「Hide frames」篩選器。foo1foo2 都相符,所以這兩者都會從圖表中移除。而由於這兩者都會呼叫 barbaz 常式,因此個別函式的資料將匯總在一起。

使用「隱藏框架」篩選 CPU 使用率的 Profiler 圖表

這個篩選器會執行區分大小寫的子字串測試。如果框架函式包含篩選器值,就會發生比對。

醒目顯示

如要醒目顯示函式名稱符合特定篩選器值的所有框架,請使用「Highlight」(醒目顯示) 篩選器。函式仍以一般顏色模式顯示,不過呼叫序列會以較不鮮豔的色調來呈現。

以下圖為例,這裡顯示的是沒有任何醒目顯示設定的圖表:

未使用醒目顯示篩選的剖析圖表

同一張圖針對 baz 函式進行醒目顯示的呈現效果如下:

使用醒目顯示的剖析圖表

這個篩選器會執行區分大小寫的子字串測試。如果框架函式包含篩選器值,就會發生比對。

色彩模式

在適當情況下,框架的色彩預設與函式的套件相對應。如果 Node.js 未隨附套件資訊,則來源檔案的名稱將用來為函式區塊加上顏色。根據預設設定,呼叫堆疊框架色彩如有變更,則代表從某套件移轉到另一個套件。預設選項會與值為「Name」(名稱) 的「Color mode」(色彩模式) 篩選器對應。

如要在火焰圖中按函式及其子項的使用量為框架加上顏色,請新增值為「Total」(總計) 的「Color mode」(色彩模式) 篩選器。如果透過多個呼叫堆疊呼叫函式,則色彩將依據所有呼叫堆疊的指標使用率而定。例如 mainbusyloop 會以紅色標示。這兩個影格會耗用最多 CPU 時間。標示為 foo2baz 的框架為深橘色,而標示為 foo1 的框架則為淺橘色。barload 的框架最輕,這個火焰圖顯示 foo2 使用的 CPU 作業時間比 foo1 多,但比 busyloop 少:

色彩模式總計

如要在火焰圖中按函式的指標使用量為框架加上顏色,並且排除函式子項的指標使用量,請新增值為「Self」(函式本身) 的「Color mode」(色彩模式) 篩選器。舉例來說,這個篩選器顯示 baz 函式耗用的 CPU 時間比其他函式還多:

色彩模式本身

後續步驟