快速入門導覽課程

本頁面說明如何設定及使用 Stackdriver Profiler。您下載 Go 程式範例後,將剖析功能啟用並執行程式,然後使用 Profiler 介面來探索擷取的資料。

事前準備

  1. 登入您的 Google 帳戶。

    如果您沒有帳戶,請申請新帳戶

  2. 在 GCP 主控台中,前往「Manage resources」(管理資源) 頁面,選取或建立專案。

    前往「Manage resources」(管理資源) 頁面

  3. 啟用Stackdriver Profiler API。

    啟用 API

啟動 Cloud Shell

在專案的 Google Cloud Platform Console 頁面最上方,按一下 [Activate Cloud Shell] (啟用 Cloud Shell) 按鈕。

啟用 Cloud Shell

系統會在主控台底部的新頁框中,開啟 Cloud Shell 工作階段並顯示指令列提示。殼層工作階段可能需要幾秒鐘的時間才能完成初始化。

Google Cloud Shell 工作階段

讓程式進行剖析

範例程式 main.go 位於 GitHub 的 golang-samples 存放區。如要取得這個程式,請擷取 Go 範例套件:

go get -u github.com/GoogleCloudPlatform/golang-samples/profiler/...

套件擷取作業需要一些時間才能完成。

剖析程式碼

前往已擷取套件中 Profiler 範例程式碼的目錄:

cd ~/gopath/src/github.com/GoogleCloudPlatform/golang-samples/profiler/profiler_quickstart

main.go 程式會建立需要使用大量 CPU 的工作負載,藉此為分析器提供資料。啟動程式並讓程式保持執行:

 go run main.go

這個程式能在本身執行時載入 CPU,且設定為使用 Profiler;因此能在程式執行時,從中收集剖析資料並定期儲存。

啟動程式後,您可在幾秒內看到 profiler has started 訊息。大約一分鐘後,畫面上會再多顯示兩則訊息:

 successfully created profile CPU
 start uploading profile

這些訊息表示剖析資料已建立並上傳到您的 Cloud Storage 專案,程式會持續發出倒數兩則訊息,並維持約每分鐘發出一次訊息的頻率直到結束執行。

啟動 Profiler 介面

如要前往 Profiler 介面,請從 Google Cloud Platform 主控台資訊主頁選取 [Profiler]

前往 Profiler

選取剖析資料

介面提供各種控制項和火焰圖,方便您探索剖析資料。

顯示範例程式碼的 Profiler 介面

時間控制項下方的選項可讓您選擇要使用的剖析資料組合。「Service」(服務) 用來選取剖析資料的起點,假如要剖析數個不同的應用程式,就很適合使用這個選項。「Profile type」(剖析資料類型) 可讓您選擇要顯示哪些類型的剖析資料。至於「Zone name」(區域名稱) 和「Version」(版本) 則可讓您限制只顯示來自 Compute Engine 區域的資料或應用程式的版本;「Weight」(權重) 可讓您選取在資源使用高峰期間擷取的剖析資料。

在「Service」(服務)、「Profile type」(剖析資料類型) 及其他選取器下方的是可供選取的篩選器。您可以利用篩選器來進一步控制要讓火焰圖顯示哪些資料。前一個螢幕擷圖中有 CPU timeMetric 篩選器。而由於未選取任何其他篩選器,因此火焰圖將顯示所有 CPU 時間資料。

探索資料

程式的呼叫堆疊會顯示在選取控制項下方的火焰圖中。每個函式都由圖中的一個火焰區塊表示;而每個函式的資源使用量比例則以火焰寬度代表。頂端框架代表整個程式,一律顯示 100% 資源使用量,並且列出這個圖表中是用多少組剖析資料來計算平均值。

在前文的螢幕擷圖中,程式範例的呼叫堆疊組合並不複雜,只有 5 個框架:

  • 灰色的框架代表整個可執行檔,佔了 100% 要使用的資源。
  • 綠色的 main 框架是 Go runtime.main
  • 橘色的 main 框架是範例程式的 main 常式。
  • 橘色的 busyloop 框架是從範例的 main 呼叫的常式。
  • 橘色的 main.load 框架是從範例的 main 呼叫的常式。

篩選器選取器可讓您篩選出符合特定名稱的函式。舉例來說,如果有公用程式函式標準程式庫,您可以從圖表中將其移除。此外,您也可以移除從特定方法發出的呼叫堆疊,或者用其他方式來簡化圖表。main.go 應用程式非常簡單,因此沒有什麼內容可供進一步篩選。不過要是應用程式很複雜,在圖表中移除不相關元素就會是一個很實用的功能。

在範例程式碼的剖析螢幕擷圖中,灰色框架比下方的第一個 main 框架稍微大一點,為什麼會這樣?有其他正在執行的事件,但因為 main 呼叫堆疊耗用的資源比例如此之大,所以無法立即顯示出來嗎?

您可以使用篩選器將來自 main 常式的呼叫堆疊隱藏,然後就能查看 main 之外發生了什麼事。這項額外的工作在資源使用量中占用的比例極小,只有 0.227%,但構成的火焰圖卻很值得解讀:

在範例程式中隱藏堆疊

如要進一步瞭解篩選及其他探索剖析資料的方式,請參閱使用 Profiler 介面一文。

後續步驟

需要其他一般資訊?

準備好剖析您自己的程式碼了嗎?請選擇您的語言:

本頁內容對您是否有任何幫助?請提供意見:

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

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