教學課程:執行負載測試以識別 Web 應用程式中的效能瓶頸

在本教學課程中,您將瞭解如何使用 Azure 負載測試識別 Web 應用程式中的效能瓶頸。 您可以模擬範例 Node.js Web 應用程式的負載,然後使用負載測試儀錶板來分析客戶端和伺服器端計量。

範例應用程式是由 Node.js Web API 所組成,其與 NoSQL 資料庫互動。 您將 Web API 部署至 Azure App 服務 Web 應用程式,並使用 Azure Cosmos DB 作為資料庫。

在本教學課程中,您會了解如何:

  • 部署範例應用程式。
  • 建立和執行負載測試。
  • 將 Azure 應用程式元件新增至負載測試。
  • 使用負載測試儀錶板識別效能瓶頸。

必要條件

必要條件檢查

開始之前,請先驗證您的環境:

  • 登入 Azure 入口網站,並檢查您的訂用帳戶是否作用中。

  • 執行 az --version,在終端機或命令視窗中檢查您的 Azure CLI 版本。 如需最新版本,請參閱 最新版本資訊

    如果您沒有最新版本,請遵循 操作系統或平臺的安裝指南來更新安裝。

部署範例應用程式

在本教學課程中,您會針對部署至 Azure App 服務 的範例 Web 應用程式產生負載。 使用 Azure CLI 命令、Git 命令和 PowerShell 命令,在您的 Azure 訂用帳戶中部署範例應用程式。

  1. 開啟 Windows PowerShell、登入 Azure,並設定訂用帳戶:

    az login
    az account set --subscription <your-Azure-Subscription-ID>
    
  2. 複製範例應用程式的來源存放庫:

    git clone https://github.com/Azure-Samples/nodejs-appsvc-cosmosdb-bottleneck.git
    

    範例應用程式是由 Azure App 服務 Web 元件和 Azure Cosmos DB 資料庫所組成的 Node.js 應用程式。 存放庫包含將範例應用程式部署至 Azure 訂用帳戶的 PowerShell 腳本。 它也具有您將在後續步驟中使用的Apache JMeter腳本。

  3. 移至 Node.js 應用程式的目錄,並使用下列 PowerShell 文稿部署範例應用程式:

    cd nodejs-appsvc-cosmosdb-bottleneck
    .\deploymentscript.ps1
    

    提示

    您可以在 Linux/WSLmacOS 上安裝 PowerShell。

    安裝之後,您可以執行上一個命令作為 pwsh ./deploymentscript.ps1

  4. 在提示中,提供:

    • 您的 Azure 訂用帳戶識別碼。
    • Web 應用程式的唯一名稱。
    • 位置。 根據預設,位置為 eastus。 您可以執行 Get-AzLocation 命令來取得區域代碼。

    重要

    針對 Web 應用程式的名稱,只使用小寫字母和數位。 請勿使用空格或特殊字元。

  5. 部署完成之後,請在瀏覽器視窗中開啟 https://<yourappname>.azurewebsites.net ,以移至執行中的範例應用程式。

現在您已部署和執行範例應用程式,您可以建立 Azure 負載測試資源和負載測試。

建立負載測試

在本教學課程中,您會上傳 JMeter 測試腳本 (jmx 檔案),以使用 Azure CLI 建立負載測試。 範例應用程式存放庫已經包含負載測試組態檔和 JMeter 測試腳本。

若要使用 Azure 入口網站 建立負載測試,請遵循快速入門:使用 JMeter 腳本建立負載測試中的步驟。

請遵循下列步驟,使用 Azure CLI 建立 Azure 負載測試資源和負載測試:

  1. 開啟終端機視窗,然後輸入下列命令來登入您的 Azure 訂用帳戶。

    az login
    
  2. 移至範例應用程式目錄。

    cd nodejs-appsvc-cosmosdb-bottleneck
    
  3. 建立 Azure 負載測試資源的資源群組。

    或者,您也可以重複使用您先前部署之範例應用程式的資源群組。

    <load-testing-resource-group-name> 文字佔位元取代為資源群組的名稱。

    resourceGroup="<load-testing-resource-group-name>"
    location="East US"
    
    az group create --name $resourceGroup --location $location
    
  4. 使用 az load create 命令建立 Azure 負載測試資源。

    <load-testing-resource-name> 文字佔位元取代為負載測試資源的名稱。

    # This script requires the following Azure CLI extensions:
    # - load
    
    loadTestResource="<load-testing-resource-name>"
    
    az load create --name $loadTestResource --resource-group $resourceGroup --location $location
    
  5. 使用 命令,建立負載測試,以針對範例應用程式 az load test create 模擬負載。

    <web-app-hostname> 文字佔位元取代為範例應用程式的App Service 主機名。 這個值格式 myapp.azurewebsites.net為 。 請勿包含 https:// URL 的一部分。

    testId="sample-app-test"
    webappHostname="<web-app-hostname>"
    
    az load test create --test-id $testId --load-test-resource $loadTestResource --resource-group $resourceGroup --load-test-config-file SampleApp.yaml --env webapp=$webappHostname
    

    此命令會 Sampleapp.yaml 使用負載測試組態檔,其會參考 SampleApp.jmx JMeter 測試腳本。 您可以使用命令列參數將範例應用程式主機名傳遞至負載測試。

您現在有 Azure 負載測試資源和負載測試,可針對 Azure 訂用帳戶中的範例 Web 應用程式產生負載。

新增 Azure 應用程式元件以監視應用程式

Azure 負載測試可讓您監視應用程式 Azure 元件的資源計量。 藉由分析這些 伺服器端計量,您可以直接從 Azure 負載測試儀錶板識別應用程式中的效能和穩定性問題。

在本教學課程中,您會為部署在 Azure 上的範例應用程式新增 Azure 元件,例如 App Service、Cosmos DB 帳戶等等。

若要將範例應用程式的 Azure 應用程式元件新增至負載測試:

  1. Azure 入口網站 中,移至您的 Azure 負載測試資源。

  2. 在左窗格中,選取 [測試 ] 以檢視負載測試清單

  3. 選取負載測試旁的複選框,然後選取 [ 編輯]。

    Screenshot that shows the list of load tests in the Azure portal, highlighting how to select a test from the list and the Edit button to modify the load test configuration.

  4. 移至 [ 監視] 索引標籤,然後選取 [新增/修改]。

  5. 選取您先前部署之範例應用程式的複選框,然後選取 [ 套用]。

    Screenshot that shows how to add app components to a load test in the Azure portal.

    提示

    您可以使用資源群組篩選,只檢視範例應用程式資源群組中的 Azure 資源。

  6. 選取 [ 套用 ] 以將變更儲存至負載測試組態。

您已成功將範例應用程式的 Azure 應用程式元件新增至負載測試,以在負載測試執行時啟用監視伺服器端計量。

執行負載測試

您現在可以執行負載測試,以針對您在 Azure 訂用帳戶中部署的範例應用程式模擬負載。 在本教學課程中,您會從 Azure 入口網站 內執行負載測試。 或者,您可以 設定 CI/CD 工作流程來執行負載測試

若要在 Azure 入口網站 中執行負載測試:

  1. Azure 入口網站 中,移至您的 Azure 負載測試資源。

  2. 在左窗格中,選取 [測試 ] 以檢視負載測試清單

  3. 從清單中選取負載測試,以檢視測試詳細數據和測試回合清單。

  4. 選取 [ 執行],然後 再次執行 以啟動負載測試。

    您可以選擇性地輸入測試回合描述。

    Screenshot that shows how to start a load test in the Azure portal.

    當您執行負載測試時,Azure 負載測試會將 JMeter 測試腳本和任何額外的檔案部署到測試引擎實例,然後啟動負載測試。

  5. 負載測試啟動時,您應該會看到負載測試儀錶板。

    如果儀錶板未顯示,您可以選取 [重新 整理],然後從清單中選取測試回合。

    負載測試儀錶板會顯示測試回合詳細數據,例如用戶端計量和伺服器端應用程式計量。 儀錶板上的圖表會自動重新整理。

    Screenshot that shows the client-side metrics graphs in the load test dashboard in the Azure portal.

    您可以套用多個篩選,或將結果匯總至不同的百分位數,以自定義圖表。

    提示

    您可以選取 [停止],隨時從 Azure 入口網站 停止負載測試。

等到負載測試完整完成,再繼續進行下一節。

使用伺服器端計量來識別效能瓶頸

在本節中,您會分析負載測試結果,以識別應用程式中的效能瓶頸。 檢查客戶端和伺服器端計量,以判斷問題的根本原因。

  1. 首先,查看用戶端計量。 請注意,和 get API 要求的回應時間計量add的第 90 個百分位數高於 API 的要求lasttimestamp

    Screenshot that shows the client-side metrics.

    您可以看到類似的錯誤模式,其中 lasttimestamp API 的錯誤數目比其他 API 少。

    Screenshot that shows the error chart.

    get API 的結果add很類似,而 lasttimestamp API 的行為則不同。 原因可能是資料庫相關,因為和 get API 都add牽涉到數據庫存取。

  2. 若要更詳細地調查此瓶頸,請向下卷動至 伺服器端計量 儀錶板區段。

    伺服器端計量會顯示 Azure 應用程式元件的詳細資訊:Azure App 服務 方案、Azure App 服務 Web 應用程式和 Azure Cosmos DB。

    Screenshot that shows the Azure App Service plan metrics.

    在 Azure App 服務 方案的計量中,您可以看到 CPU 百分比和記憶體百分比計量在可接受的範圍內。

  3. 現在,請查看 Azure Cosmos DB 伺服器端計量。

    Screenshot that shows Azure Cosmos DB metrics.

    請注意, 標準化 RU 耗用量 計量會顯示資料庫在 100% 的資源使用率上快速執行。 高資源使用量可能會導致資料庫節流錯誤。 它也可能會增加和 get Web API 的add回應時間。

    您也可以看到 Azure Cosmos DB 實例的布建輸送量 計量最大輸送量為 400 RU。 增加資料庫的布建輸送量可能會解決效能問題。

增加資料庫輸送量

在本節中,您會將更多資源配置給資料庫,以解決效能瓶頸。

針對 Azure Cosmos DB,增加資料庫 RU 調整設定:

  1. 移至您在範例應用程式部署中布建的 Azure Cosmos DB 資源。

  2. 選取 [數據總 管] 索引標籤

    Screenshot that shows Data Explorer tab.

  3. 選取 [調整和 設定],並將輸送量值更新為 1200

    Screenshot that shows the updated Azure Cosmos DB scale settings.

  4. 選取 [ 儲存] 以確認變更。

驗證效能改善

現在您已增加資料庫輸送量,請重新執行負載測試,並確認效能結果已改善:

  1. 在測試回合儀錶板上,選取 [重新執行],然後在 [重新執行測試] 窗格中選取 [重新執行]。

    Screenshot that shows selections for running the load test.

    您可以看到新的測試回合專案,其狀態數據行會迴圈執行 建、 執行完成 狀態。 隨時選取測試回合,以監視負載測試的進度。

  2. 負載測試完成後,請檢查 用戶端計量的回應時間 結果和 錯誤 結果。

  3. 檢查 Azure Cosmos DB 的伺服器端計量,並確定效能有所改善。

    Screenshot that shows the Azure Cosmos DB client-side metrics after update of the scale settings.

    Azure Cosmos DB 標準化 RU 耗用量 值現在遠低於 100%。

現在您已更新資料庫的調整設定,您可以看到:

  • get API 的add回應時間已改善。
  • 標準化 RU 耗用量仍然遠遠低於限制。

因此,應用程式的整體效能已改善。

清除資源

重要

您可以重複使用您為其他 Azure 負載測試教學課程和操作說明文章建立的 Azure 負載測試資源。

如果您不打算使用您所建立的任何資源,請將其刪除,以免產生任何進一步的費用。 如果您已在不同的資源群組中部署範例應用程式,您可能想要重複下列步驟。

若要使用 Azure 入口網站 刪除資源:

  1. 選取左上角的功能表按鈕,然後選取 [資源群組]。

  2. 從清單中,選取您建立的資源群組。

  3. 選取 [刪除資源群組]Screenshot of the selections to delete a resource group in the Azure portal.

  4. 輸入資源組名。 接著選取刪除

若要使用 Azure CLI 刪除資源,請輸入下列命令:

az group delete --name <yourresourcegroup>

請記住,刪除資源群組會刪除其中的所有資源。