使用 Stackdriver Profiler 介面

Stackdriver Profiler 介面會顯示一個火焰圖及一組控制項,讓您分析由剖析代理程式收集的資料。本頁面說明如何解讀火焰圖並解說每個控制項;以下頁面會進一步說明具體概念:

  • 篩選剖析資料:說明如何使用篩選條件來變更火焰圖,以顯示需要的特定資料。
  • 聚焦圖表:說明如何變更火焰圖,以鎖定特定功能。
  • 比較剖析資料:說明如何比較不同版本應用程式的剖析資料,或依指標使用比較剖析資料。

事前準備

使用 Profiler 分析資料前,您必須先收集一些要用來分析的剖析資料。如要瞭解如何使用 Profiler 代理程式來收集剖析資料,請參閱以下各篇:

開啟 Profiler 介面

使用 Profiler 介面的方式如下:

  1. 在 Google Cloud Platform 主控台中選取您的專案:

    選取 GCP 專案

  2. 在左側導覽面板中,捲動至 Stackdriver 並按一下 [Profiler]。

    前往 Profiler

Profiler 圖表

火焰圖是由各個「框架」組成。每個框架都代表服務中的一個函式:

  • 框架的寬度相當於該框架中要分析的指標的使用率。舉例來說,頂端框架代表整個服務並使用了要分析的指標的 100%。因此,這個框架會以完整寬度顯示。

  • 在適當情況下,框架的色彩預設與函式的套件相對應。如果 Node.js 未隨附套件資訊,則來源檔案的名稱將用來為函式區塊加上顏色。在呼叫堆疊中,區塊顏色的變更代表從某套件移轉到另一個套件。您可以變更為框架加上顏色的方式。詳情請參閱色彩模式

火焰圖顯示一或多個具有剖析資料匯總值的呼叫堆疊:

  • 每一組個別剖析資料都代表在單一 Compute Engine 區域中,針對已設定服務的單一執行個體每分鐘收集一次的資料。剖析資料的收集期間與剖析資料類型不同。詳情請參閱「剖析資料收集」。
  • 最多可計算 250 組剖析資料的平均值,如果可用的剖析資料超過 250 組,則系統會從中隨機挑選 250 組剖析資料來當做樣本集。
  • 火焰圖中的頂端框架 (又稱「根框架」) 代表整個服務。「根框架」底下 (圖表中第二列) 則是另一個框架或另一組框架。這些加上色彩編碼的框架每一個都是由服務提出的頂層呼叫。在有顏色的每個函式框架底下則是另一組函式框架,其中每個都代表上方框架的特定資源部分。圖表中函式框架的階層代表呼叫序列,框架寬度則表示該函式或方法占用的資源使用比例。

舉例來說,hotapp-service 的使用堆疊 Profiler 圖表顯示該服務呼叫了不同的頂層框架,其中一個是 Go 執行階段的 main 函式。從這些頂層框架的寬度可看出,大部分的堆疊都是由涉及 Go 執行階段的 main、應用程式專屬 mainallocOnceallocImpl 的呼叫堆疊所使用:

堆積使用量的 Profiler 圖表

將游標懸停在框架上會發生什麼情況?

您將滑鼠指標懸停在火焰圖的某框架上,即可開啟框架工具提示,其中顯示框架相關的額外資訊:

  • Function name (函式名稱)
  • Source file location (來源檔位置)
  • Metric consumption information (指標使用資訊)

在指標使用資訊中,前置詞「total」(總計) 列出的指標值和百分比是函式及其子項的總值;而「self」(本身) 則是指出函式本身的指標值和百分比,不含其子項的使用率。

對話方塊也會提供以下三種篩選動作的按鈕:

在這個例子中,工具提示指出 runtime.main 函式位於 /usr/local/go/src/runtime/proc.go 檔案中。指標使用資訊顯示 runtime.main 及其子項使用了 55.41 MiB 的記憶體,約相當於 92% 的程式總記憶體使用量。

runtime.main 的 Profiler 圖表

點選框架會發生什麼情況?

當您點選框架,系統就會重新繪製火焰圖,使該框架以完整寬度顯示,而呼叫堆疊中使用的顏色如果比框架醒目,系統就會將顏色調暗。點選框架並不會變更任何設定,只會改變圖表的顯示方式。您只要按一下根 (頂端) 框架,就能將圖表還原為原始樣貌。

在以下範例中,滑鼠指標落在極小的框架上,不易查看呼叫堆疊。工具提示會將 (*huffmanBitWriter).write 識別為框架函式:

圖表中的極小框架

當您點選框架,系統就會重新繪圖表,讓您可以更清楚的看到呼叫堆疊:

展開的極小框架

Profiler 控制項

您可以使用 Profiler 介面控制項來決定要分析哪些剖析資料,以及要在 Profiler 圖表中顯示的資訊。

時間範圍

您可以使用「Timespan」(時間範圍) 選單的 [Now] (現在) 按鈕和「End time」(結束時間) 選單,控制顯示剖析資料的時間範圍。當您變更時間欄位時,Profiler 會找出所有符合目前時間範圍的可用剖析資料,並隨機選取 250 筆資料進行分析。這項操作可能會導致圖表產生變化,原因是分析中所包含的剖析資料與原本資料並不相同。在剖析工作階段期間,系統不會自動更新時間欄位。

根據預設,時間欄位的設定如下:

  • Timespan (時間範圍):設為 7 天。
  • Now (現在) 按鈕:會加上藍色背景。
  • End time (結束時間):包含開始 Profiler 的時間,這個時間無法修改。

在這些設定之下,Profiler 會分析最近 7 天內擷取的剖析資料。

如要設定時間範圍,請按一下「Timespan」(時間範圍) 向下箭號,然後從清單中選取選項;選項範圍從 10 分鐘到 30 天 (剖析資料的保留期限)。

如要將結束時間更新為目前時間,請按一下 [Now] (現在)。這個按鈕的背景色會在藍色和白色之間切換。無論是上述哪種情況,按一下這個按鈕,結束時間欄位就會更新為目前時間。

如要設定結束時間,請執行下列操作:

  • 如下圖所示,如果「End time」(結束時間) 欄位裡的文字無法更改,請按一下 [Now] (現在)

    使用「now」(現在) 做為結束時間

  • 在「End time」(結束時間) 欄位中輸入日期和時間,或使用日曆選項來選取日期:

    明確設定結束時間

服務

使用「Service」(服務) 選單來選取您要分析哪個服務的資料。服務名稱是您 (或執行階段環境) 在執行已啟用剖析功能的應用程式時指定的其中一個值。如要進一步瞭解服務名稱,請參閱 GoJavaNode.jsPython 的剖析指南。

剖析資料類型

使用「Profile type」(剖析資料類型) 選單,來選取要分析哪個類型的剖析資料。 analyze. 不同語言支援的剖析資料類型也有所差異:

剖析資料類型 Go1 Java Node.js Python
CPU 4
堆積 2
爭用情況
執行緒
實際時間 3 5

1 如果是 App Engine 標準環境,需要使用 Go 1.11 版或較新版本。
2 只適用於 App Engine 標準環境。
3 不適用於 App Engine 標準環境。
4 只適用於 Python 3.2 版和更高版本。
5 只適用於 Python 3.6 版和更高版本。

每個剖析資料類型各會擷取不同的資訊。

  • CPU time (CPU 時間):有關 CPU 使用情況的資訊
  • Heap (堆積):有關記憶體使用情況的資訊
  • Contention (爭用情況):有關互斥使用情況的資訊
  • Threads (執行緒):有關執行緒使用情況的資訊
  • Wall time (實際時間):有關執行時間總計的資訊

區域

如果只要分析在特定 Compute Engine 區域內執行的服務執行個體,請按一下「Zone」(區域) 向下箭號,然後從清單中選取區域。

這個欄位的預設設定為「All zones」(所有區域)

版本

如只要分析已命名服務的特定版本,請按一下「Version」(版本) 向下箭號,然後選取要分析的版本。服務版本是您 (或執行階段環境) 在執行已啟用剖析功能的應用程式時選擇性指定的值。如要進一步瞭解服務版本,請參閱 GoJavaNode.jsPython 的剖析指南。

這個欄位的預設設定為 [All versions] (所有版本)

權重

如果只要分析指標使用量落在特定尖峰使用百分比範圍時擷取的剖析資料,請按一下「Weight」(權重) 向下箭號,然後從選單中選取選項。「Weight」(權重) 選單範例如下:

      All (3.07 s - 3.25 s), 20146 profiles
      Top 50% (3.16 s - 3.25 s), 12974 profiles
      Top 25% (3.21 s - 3.25 s), 1019 profiles
      Top 10% (3.23 s - 3.25 s), 7 profiles
      Top 5% (3.24 s - 3.25 s), 2 profiles
      Top 1% (3.25 s - 3.25 s), 2 profiles

在「Weight」(權重) 選單中,大部分的資料列開頭都是 Top,後面跟著百分比。例如 Top 5% 表示只有前 5% 指標使用期間內收集的剖析資料可用於分析。括號內的兩個值是對應的指標使用範圍。最後面的值是這個範圍所收集到的剖析資料數量,就 Top 5% 資料列來說,收集了 2 個剖析資料。

首列是「Weight」(權重) 欄位的預設設定。All 字樣代表所有收集的剖析資料 (等於 100% 的收集剖析資料) 都可用於分析。

以下螢幕擷圖顯示根據權重篩選的圖表:

篩選昂貴剖析資料的圖表

這個欄位的預設設定為所有剖析資料。

比較

如要比較兩組擷取相同服務 (具有專案) 的同類型剖析資料,請使用「Compare To」(比較) 功能;詳情請參閱比較剖析資料一文。

這個欄位的預設設定為 [None] (無)

聚焦

如要聚焦特定函式的火焰圖,請按一下位於篩選列左側的「List」(清單) 圖示 list,然後從 [Select focus function] (選取聚焦函式) 資料表中選取函式。當您將框架圖聚焦於特定函式時,圖表會顯示所有傳入和傳出該函式的程式碼路徑。範例請參見聚焦圖表一文。

將火焰圖聚焦於特定函式為選用功能。

篩選器

您可以使用篩選器來選擇要顯示所選剖析資料中的哪些資料。

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

     [FILTER-OPTION] : [VALUE]

使用的篩選器會在篩選列中顯示為「篩選器方塊」。所有篩選器方塊都會顯示篩選器選項、篩選器值和「關閉」按鈕。以下範例的篩選器方塊顯示 Metric : Bytes

顯示篩選器方塊

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

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

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

按一下篩選器方塊上的「關閉」按鈕,即可移除篩選器。

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

如要進一步瞭解篩選選項和範例說明,請參閱篩選剖析資料一文。

下載

Stackdriver Profiler 可讓您將剖析資料保留 30 天,如要長久保存或有其他需要,您也可以選擇下載資料。按下載 get_app,Profiler 就會將壓縮檔寫入您的本機檔案系統。檔案名稱為:

 profiler_[SERVICE_NAME]_[PROFILE_TYPE]_[FROM_DATE]_[TO_DATE]_[ZONE]_[VERSION].pb.gz

其中:

  • SERVICE_NAME 包含您的「Service」(服務) 選取項目
  • PROFILE_TYPE 包含您的「Profile type」(剖析資料類型) 選取項目
  • FROM_DATETO_DATE 包含您的時間範圍規格
  • ZONE 包含您的「Zone」(區域) 選取項目
  • VERSION 包含您的「Version」(版本) 選取項目

例子:profiler_hotapp-service_HEAP_2018-04-22T20_25_31Z_2018-05-22T20_25_31Z_us-east1-c.pb.gz

資料會以序列化通訊協定緩衝區 (.pb) 的格式寫入。開放原始碼 pprof 工具能讀取這個格式,因此您除了儲存這項資料還可加以分析。詳情請參閱 pprof 說明文件

後續步驟

  • 如需有關篩選的範例說明及詳細資訊,請參閱篩選剖析資料一文。
  • 如要瞭解如何將圖表聚焦於特定函式,請參閱聚焦圖表一文。
  • 如要瞭解如何比較兩組剖析資料,請參閱比較剖析資料一文。
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Stackdriver Profiler
需要協助嗎?請前往我們的支援網頁