篩選火焰圖
您可以透過 Cloud Profiler 新增篩選器,控制所選設定檔中顯示的資訊。舉例來說,您可以新增篩選器來隱藏特定影格或呼叫堆疊。新增和移除篩選器不會變更所選剖析資料的組合。
每個篩選器皆由預先定義的 FILTER-OPTION
搭配使用者定義的 VALUE
來指定:
[FILTER-OPTION] : [VALUE]
每個新增的篩選器都會顯示在篩選條件列上。以下範例的篩選器顯示 Metric : Bytes
:
Profiler 會根據您選取的剖析資料類型,自動建立 FILTER-OPTION
為 Metric
和 VALUE
的篩選器,有些剖析資料類型可以變更 VALUE
,您無法移除這個篩選器。
如要新增篩選器,請使用下列其中一種方法:
- 按一下「Filters」圖示 filter_list,從清單中選取選項並輸入值。
- 按一下篩選列中的灰色字 [Add profile data filter] (新增剖析資料篩選器),然後輸入篩選器選項和值。
- 如要使用「Focus」(聚焦)、「Show from frame」(以框架為條件顯示) 和「Show stacks」(顯示堆疊) 篩選器選項,您也可以將滑鼠指標放在框架上,然後從框架工具提示中選取任一選項。
如要移除篩選器,請按一下篩選器上的「關閉」圖示 close。
準備要顯示的資料時,Profiler 會搜尋框架與篩選器之間的相符項目。如有相符項目,Profiler 就會使用 FILTER-OPTION
來決定該執行什麼動作。只要框架函式名稱或函式來源檔案名稱包含 VALUE
,框架就會「符合」該篩選器的條件。系統會執行區分大小寫的比較作業。舉例來說,如果篩選器是 Hide frames : oo
,則火焰圖就不會呈現函式名稱為 foo
、foo1
和 busyloop
的框架。
指標
如要設定剖析資料類型匯總模式,請使用「Metric」(指標) 篩選器。舉例來說,如果您選取「Heap」剖析資料類型,則您可選擇要以「Bytes」和「Objects」來視覺化呈現資料。
「Metric」(指標) 篩選器可用的選擇取決於程式設計語言及您選取的「Profile type」(剖析資料類型):
- 如果是「CPU time」(CPU 時間) 剖析資料,則唯一可用的選項是 [CPU time] (CPU 時間)。
如果是「Heap」(堆積) 剖析資料,則可用選項包括:
- 位元組
- 物件
如果是「Allocated Heap」(分配的堆積) 剖析資料,則可用選項包括:
- 總分配位元組
- 總分配物件
如果是「Wall time」(實際時間) 剖析資料,則可用選項包括:
- 數量
- 實際時間
如果是「Threads」(執行緒) 剖析資料,則唯一可用的選項是 [Goroutine]。
如果是「Contention」(爭用情況) 剖析資料,則可用選項包括:
- 延遲
- Contentions
如要進一步瞭解剖析指標的類型,請參閱剖析概念。
下例的螢幕擷圖顯示了某程式的 CPU 使用情況:
您可以從這裡看到 busyloop
常式呼叫了 foo1
和 foo2
,而這兩者都會呼叫數種其他常式。您可以新增篩選器進一步限制圖表,使其只顯示您想查看的資料。
聚焦
當您使用「Focus」(聚焦) 篩選器時,只要選取一個「函式」,火焰圖就會顯示傳入和傳出該特定函式的程式碼路徑。
如要進一步瞭解如何聚焦圖表及解讀結果,請參閱「聚焦火焰圖」一文。
顯示堆疊
如要顯示所有包含特定框架 (符合篩選器值) 的呼叫堆疊,請使用「Show stacks」(顯示堆疊) 篩選器。圖表將顯示函式的呼叫者和受呼叫者,也就是呼叫比對函式的所有項目,以及呼叫的所有項目。
這個篩選器會執行區分大小寫的子字串測試。如果框架函式包含篩選器值,就會發生比對。
如要將上述範例的 CPU 使用率圖表限制為只顯示涵蓋函式 foo1
的呼叫堆疊,請為 foo1
設定「Show stacks」(顯示堆疊) 篩選器:
隱藏堆疊
隱藏所有包含符合篩選器值之特定框架的呼叫堆疊。當您想要隱藏不需要的堆疊時,這個篩選器通常相當實用。舉例來說,在 Java 應用程式中,加入 Hide stacks: unsafe.park
篩選器是很常見的做法。
這個篩選器會執行區分大小寫的子字串測試。如果框架函式包含篩選器值,就會發生比對。
以框架為條件顯示
如要顯示框架為符合特定篩選器值開始的所有呼叫堆疊,並隱藏所有其他呼叫堆疊,請使用「Show from frame」(以框架為條件顯示) 篩選器。以此條件篩選的圖表將顯示從已命名函式之後的呼叫堆疊。如果您從多個位置呼叫函式,而您想要查看歸因該函式的總使用量,就很適合選用這個篩選器。
舉例來說,如果您只要顯示源自 baz
函式的呼叫,請為 baz
設定「Show from frame」(以框架為條件顯示) 篩選器:
這個篩選器會執行區分大小寫的子字串測試。如果框架函式包含篩選器值,就會發生比對。
隱藏框架
如要隱藏符合特定篩選器值的所有框架,使其不會顯示,請使用「Hide frames」(隱藏框架) 篩選器。圖表將顯示函式的呼叫者,而函式的所有受呼叫者將集合顯示。想要從圖表中移除不相關的框架時,就很適合使用這個篩選器。
舉例來說,如要隱藏 foo1
和 foo2
的框架,請針對 foo
設定「Hide frames」篩選器。foo1
和 foo2
都相符,所以這兩者都會從圖表中移除。而由於這兩者都會呼叫 bar
和 baz
常式,因此個別函式的資料將匯總在一起。
這個篩選器會執行區分大小寫的子字串測試。如果框架函式包含篩選器值,就會發生比對。
醒目顯示
如要醒目顯示函式名稱符合特定篩選器值的所有框架,請使用「Highlight」(醒目顯示) 篩選器。函式仍以一般顏色模式顯示,不過呼叫序列會以較不鮮豔的色調來呈現。
以下圖為例,這裡顯示的是沒有任何醒目顯示設定的圖表:
同一張圖針對 baz
函式進行醒目顯示的呈現效果如下:
這個篩選器會執行區分大小寫的子字串測試。如果框架函式包含篩選器值,就會發生比對。
色彩模式
在適當情況下,框架的色彩預設與函式的套件相對應。如果 Node.js 未隨附套件資訊,則來源檔案的名稱將用來為函式區塊加上顏色。根據預設設定,呼叫堆疊框架色彩如有變更,則代表從某套件移轉到另一個套件。預設選項會與值為「Name」(名稱) 的「Color mode」(色彩模式) 篩選器對應。
如要在火焰圖中按函式及其子項的使用量為框架加上顏色,請新增值為「Total」(總計) 的「Color mode」(色彩模式) 篩選器。如果透過多個呼叫堆疊呼叫函式,則色彩將依據所有呼叫堆疊的指標使用率而定。例如 main
和 busyloop
會以紅色標示。這兩個影格會耗用最多 CPU 時間。標示為 foo2
和 baz
的框架為深橘色,而標示為 foo1
的框架則為淺橘色。bar
和 load
的框架最輕,這個火焰圖顯示 foo2
使用的 CPU 作業時間比 foo1
多,但比 busyloop
少:
如要在火焰圖中按函式的指標使用量為框架加上顏色,並且排除函式子項的指標使用量,請新增值為「Self」(函式本身) 的「Color mode」(色彩模式) 篩選器。舉例來說,這個篩選器顯示 baz
函式耗用的 CPU 時間比其他函式還多: