剖析 Node.js 程式碼

本頁面說明如何設定 Stackdriver Profiler 來剖析 Node.js 程式碼。針對 Node.js,Profiler 提供實際時間和堆積剖析功能,詳情請參閱剖析概念

支援的 Node.js 版本如下:

  • 在 8.x 版本分支上的 8.9.4 版或更高版本。
  • 在 10.x 版本分支上的 10.4.1 版或更高版本。

您可在下列環境中的 Linux 上使用剖析代理程式:

  • Compute Engine
  • Google Kubernetes Engine
  • App Engine

您也可以在非 Google Cloud Platform 系統上剖析 Node.js 程式碼。詳情請參閱在 Google Cloud Platform 以外的環境剖析程式碼一文。

啟用 Profiler API

使用剖析代理程式之前,請確保基礎 Profiler API 已啟用。您可以查看 API 狀態,或視需要使用 Cloud SDK gcloud 指令列工具或 Cloud Console 來啟用 API。

Cloud SDK

  1. 如果您尚未在工作站上安裝 Cloud SDK,請參閱 Google Cloud SDK

  2. 執行下列指令:

    gcloud services enable cloudprofiler.googleapis.com
    

詳情請參閱 gcloud services 一文。

Cloud Console

  1. 前往「APIs & Services」(API 和服務) 資訊主頁。

    前往 API 和服務頁面

  2. 選取您要用來存取 API 的專案。

  3. 按一下 [Add APIs and Services] (新增 API 和服務) 按鈕。

    新增 API 和服務

  4. 搜尋「Profiler API」

  5. 選取搜尋結果中的 [Stackdriver Profiler API]

  6. 如果畫面顯示 [API enabled] (API 已啟用),代表 API 已啟用。如果未顯示,請按一下 [Enable] (啟用) 按鈕。

使用 Stackdriver Profiler

如要透過所有支援的環境使用 Profiler,您可以先在應用程式內安裝並要求套件,然後按正常方式部署應用程式。

如要安裝最新版本的 Stackdriver Profiler,請執行以下指令:

    npm install --save @google-cloud/profiler

請注意,如果您在修改程式碼時同時也使用 Trace 代理程式,請在 Trace 代理程式 (@google-cloud/trace-agent) 後匯入 Profiler。詳情請參閱「為 Node.js 設定 Stackdriver Trace」。

Compute Engine

如果是 Compute Engine,請按照下列步驟操作:

  1. 安裝最新版本的 Stackdriver Profiler:

    npm install --save @google-cloud/profiler
    
  2. 將您的應用程式修改為「require」程式碼建立 serviceContext 物件,由該物件來為 service 指派要剖析的服務的名稱。此外,您也可以為 version 指派要剖析的服務的版本,但您不一定要指定。如需有關這些設定選項的詳細資訊,請參閱服務名稱和版本引數

    require('@google-cloud/profiler').start({
      serviceContext: {
          service: 'your-service',
          version: '1.0.0'
      }
    });

Google Kubernetes Engine

如果是 Google Kubernetes Engine (GKE),請按照下列步驟操作:

  1. 修改您的 Dockerfile 來安裝 Profiler 套件:

    FROM node:10
    ...
    RUN npm install @google-cloud/profiler
    
  2. 將您的應用程式修改為「require」程式碼建立 serviceContext 物件,由該物件來為 service 指派要剖析的服務的名稱。此外,您也可以為 version 指派要剖析的服務的版本,但您不一定要指定。如需有關這些設定選項的詳細資訊,請參閱服務名稱和版本引數

    require('@google-cloud/profiler').start({
      serviceContext: {
          service: 'your-service',
          version: '1.0.0'
      }
    });

App Engine

針對 App Engine,require 程式碼如下所示:

require('@google-cloud/profiler').start();

在 App Engine 環境中,serviceversion 參數都是直接衍生自環境,因此您不用另外指定。因此,您不需要建立 serviceContext 物件。

分析資料

Profiler 收集資料之後,您就可以使用 Profiler 介面來查看和分析資料。如要開始使用介面,請參閱「開啟 Profiler 介面」。

服務名稱和版本引數

載入 Profiler 代理程式時,您可指定 service-name 引數及 service-version 引數 (選用) 來加以設定。

「service name」(服務名稱) 可讓 Profiler 收集有關這項服務的所有備用資源剖析資料。分析器服務會針對每個服務名稱的各個版本及區域組合,確保平均每分鐘一個剖析作業的收集頻率。

舉例來說,如果您有一個服務,共有兩個版本在三個區域的備用資源執行,則分析器會為這個服務建立平均每分鐘 6 個剖析作業。

如果您為備用資源使用不同的服務名稱,系統剖析服務的頻率就會比平常更高,相對地負擔也會更大。

選取服務名稱時:

  • 選擇的名稱要能清楚代表應用程式架構中的服務。如果您只執行單一服務或應用程式,服務名稱的選擇就不那麼重要;但如果應用程式是以一組微服務的形式執行,建議就應選擇適當的服務名稱。

  • 請勿在 service-name 字串中使用任何 process-specific 值 (例如 ID)。

  • service-name 字串必須符合這個規則運算式:

    ^[a-z]([-a-z0-9_.]{0,253}[a-z0-9])?$

使用靜態字串 (如 imageproc-service) 做為服務名稱就是不錯的做法。

「service version」(服務版本) 則為選填項目。如果您指定服務版本,Profiler 可從多個執行個體匯總剖析資訊並正確顯示;這項引數可用來標記服務部署時的不同版本。Profiler UI 可讓您按照服務版本篩選資料,這樣一來,您就能比較新舊版程式碼的運作效能。

service-version 引數的值是任意形式的字串,不過這個引數的值看起來通常和版本號碼類似,例如 1.0.02.1.2

代理程式記錄

剖析代理程式可報告記錄資訊。如要啟用記錄功能,請在啟動代理程式時設定 logLevel 選項。支援的 logLevel 值如下:

  • 0:停用所有代理程式記錄。
  • 1:啟用錯誤記錄。
  • 2:啟用警告記錄 (預設)。
  • 3:啟用資訊記錄。
  • 4:啟用偵錯記錄

在用來提供服務背景內容的同一個物件中設定 logLevel 值:

require('@google-cloud/profiler').start({
    serviceContext: { ... }
    logLevel:       3
});

已知問題

以下是 Beta 版 Node.js 專用 Stackdriver Profiler 的已知問題:

  • Node.js 的剖析代理程式會干擾程式的正常離開程序;程式中所有工作都完成後,終止程式可能需要花費長達一小時的時間。而如果強制離開程式 (例如使用 Ctrl-C) 就會導致程式立即終止。

後續步驟

如要進一步瞭解 Profiler 圖表和控制項,請參閱使用 Stackdriver Profiler 介面一文。如要瞭解進階資訊,請參考以下主題:

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

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

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