Share via


針對常見的 Azure Spring Apps 問題進行疑難解答

注意

Azure Spring Apps 是 Azure Spring Cloud 服務的新名稱。 雖然服務有新的名稱,但是您暫時還是會在某些位置看到舊的名稱。我們正在致力更新螢幕擷取畫面、影片和圖表等資產。

本文適用於: ✔️基本/標準✔️企業

本文提供針對 Azure Spring Apps 開發問題進行疑難解答的指示。 如需詳細資訊,請參閱 Azure Spring Apps 常見問題

可用性、效能和應用程式問題

我的應用程式無法啟動

當應用程式無法啟動時,您可能會發現其端點無法連線,或在幾次重試之後傳回 502。

如需疑難解答,請將記錄導出至 Azure Log Analytics。 Spring 應用程式記錄的數據表名為 AppPlatformLogsforSpring。 若要深入瞭解,請參閱 使用診斷設定來分析記錄和計量。

下列錯誤訊息可能會出現在您的記錄檔中: org.springframework.context.ApplicationContextException: Unable to start web server

訊息指出兩個可能問題的其中一個:

  • 其中一個豆類或其相依性遺失。
  • 其中一個 Bean 屬性遺漏或無效。 在此情況下,會顯示 「java.lang.IllegalArgumentException」。。

服務系結也可能造成應用程式啟動失敗。 若要查詢記錄,請使用與系結服務相關的關鍵詞。 例如,假設您的應用程式已系結至設定為本機系統時間的 MySQL 實例。 如果應用程式無法啟動,則記錄檔中可能會出現下列錯誤訊息:

「java.sql.SQLException:無法辨識或代表多個時區的伺服器時區值 'Coordinated Universal Time'。

若要修正此錯誤,請移至 server parameters MySQL 實例的 ,並將值從 SYSTEM 變更time_zone+0:00

我的應用程式損毀或擲回未預期的錯誤

當您偵錯應用程式當機時,請先檢查應用程式的執行狀態和探索狀態。 若要這樣做,請移至 Azure 入口網站 中的 [應用程式],以確保所有應用程式的狀態皆為 [執行中] 和 [UP]。

  • 如果狀態為 [正在執行 ],但探索狀態不是 UP,請移至 [無法註冊我的應用程式] 區段。

  • 如果探索狀態為 UP,請移至 [計量] 以檢查應用程式的健康情況。 檢查下列計量:

    • tomcat.global.error

      這裡會計算所有 Spring 應用程式例外狀況。 如果這個數位很大,請移至 Azure Log Analytics 以檢查您的應用程式記錄。

    • jvm.memory.max

      應用程式可用的記憶體數量上限。 數量可能未定義,或定義後可能會隨著時間而變更。 如果已定義,使用和認可的記憶體數量一律小於或等於最大值。 不過,如果配置嘗試增加已認可的已使用>記憶體,即使 used <= max 仍為 true,記憶體配置可能會失敗OutOfMemoryError並出現訊息。 在這種情況下,請嘗試使用 -Xmx 參數來增加堆積大小上限。

    • jvm.memory.used

      應用程式目前使用的位元組記憶體數量。 對於一般負載 Java 應用程式,此計量系列會形成 鋸齒 模式,其中記憶體使用量會穩步增加和減少,並突然下降很多,然後模式會遞歸。 此計量系列是因為 Java 虛擬機內的垃圾收集,其中收集動作代表鋸齒模式上的卸除。

      此計量對於協助識別記憶體問題很重要,例如:

      • 一開始的記憶爆炸。
      • 特定邏輯路徑的激增記憶體配置。
      • 記憶體逐漸流失。

    如需詳細資訊,請參閱:計量

    注意

    這些計量僅適用於 Spring Boot 應用程式。 若要啟用這些計量,請新增 spring-boot-starter-actuator 相依性。 如需詳細資訊,請參閱使用 Spring Boot 執行器管理及監視應用程式的新增執行器依性一節。

  • 如果應用程式無法啟動,請確認應用程式具有有效的 jvm 參數。 如果 jvm 記憶體設定太高,您的記錄中可能會顯示下列錯誤訊息:

    「所需的記憶體 2728741K 大於 2000M 可供配置」

若要深入瞭解 Azure Log Analytics,請參閱 開始使用 Azure 監視器中的 Log Analytics。

我的應用程式遇到高 CPU 使用量或高記憶體使用量

如果您的應用程式遇到高 CPU 或記憶體使用量,則有兩件事之一成立:

  • 所有應用程式實例都會經歷高 CPU 或記憶體使用量。
  • 某些應用程式實例遇到高 CPU 或記憶體使用量。

若要確定適用哪些情況,請使用下列步驟:

  1. 移至 [計量],然後選取 [服務 CPU 使用量百分比] 或 [服務記憶體已使用]。
  2. 新增 App= 篩選,以指定您要監視的應用程式。
  3. 實例分割計量。

如果 所有實例 都遇到高 CPU 或記憶體使用量,您必須相應放大應用程式或相應增加 CPU 或記憶體使用量。 如需詳細資訊,請參閱 教學課程:在 Azure Spring Apps 中調整應用程式。

如果 某些實例 遇到高 CPU 或記憶體使用量,請檢查實例狀態及其探索狀態。

如需詳細資訊,請參閱 Azure Spring Apps 的計量。

如果所有實例都啟動並執行中,請移至 Azure Log Analytics 以查詢應用程式記錄並檢閱您的程式代碼邏輯。 此檢閱可協助您查看其中任何一項是否可能會影響調整數據分割。 若要深入了解,請參閱使用診斷設定分析記錄和計量

若要深入瞭解 Azure Log Analytics,請參閱 開始使用 Azure 監視器中的 Log Analytics。 使用 Kusto 查詢語言來查詢記錄。

將 Spring 應用程式部署至 Azure Spring Apps 的檢查清單

在將應用程式上線之前,請確定它符合下列準則:

  • 應用程式可以使用指定的 Java 執行時間版本在本機執行。
  • 環境設定 (CPU/RAM/Instances) 符合應用程式提供者所設定的最低需求。
  • 組態專案具有其預期值。 如需詳細資訊,請參閱 為您的服務設定 Spring Cloud Config Server 實例。 如需企業方案,請參閱 使用應用程式組態服務
  • 環境變數具有其預期值。
  • JVM 參數具有其預期值。
  • 建議您從應用程式套件停用或移除內嵌 的 Config ServerSpring Service Registry 服務。
  • 如果有任何 Azure 資源要透過 服務系結系結,請確定目標資源已啟動並執行。

設定和管理

我在建立 Azure Spring Apps 服務實例時遇到問題

當您使用 Azure 入口網站 設定 Azure Spring Apps 服務實例時,Azure Spring Apps 會為您執行驗證。

但是,如果您嘗試使用 Azure CLIAzure Resource Manager 範本來設定 Azure Spring Apps 服務實例,請確認您符合下列條件:

  • 訂用帳戶為作用中。
  • Azure Spring Apps 可在您使用的區域取得。 如需詳細資訊,請參閱 Azure Spring Apps 常見問題
  • 實例的資源群組已建立。
  • 資源名稱符合命名規則。 名稱必須只包含小寫字母、數位和連字元。 第一個字元必須是字母。 最後一個字元必須是字母或數位。 值必須包含 2 到 32 個字元。

如果您想要使用 Resource Manager 範本來設定 Azure Spring Apps 服務實例,請先參閱 瞭解 Azure Resource Manager 範本的結構和語法。

Azure Spring Apps 服務實例的名稱用於要求底下的 azuremicroservices.io子域名稱,因此如果名稱與現有名稱衝突,安裝程式就會失敗。 您可能會在活動記錄中找到更多詳細數據。

我無法部署 .NET Core 應用程式

您無法使用 Azure 入口網站 或 Resource Manager 範本上傳 .NET Core Steeltoe 應用程式的.zip檔案。

當您使用 Azure CLI 部署應用程式套件時,Azure CLI 會定期輪詢部署進度,最後會顯示部署結果。

請確定您的應用程式是以正確的 .zip 檔案格式封裝。 如果未正確封裝,進程會停止回應,或您收到錯誤訊息。

我無法部署 JAR 套件

您無法使用 Azure 入口網站 或 Resource Manager 範本來上傳 Java 封存盤案 (JAR)/來源套件。

當您使用 Azure CLI 部署應用程式套件時,Azure CLI 會定期輪詢部署進度,最後會顯示部署結果。

如果輪詢中斷,您仍然可以使用下列命令來擷取部署記錄:

az spring app show-deploy-log --name <app-name>

請確定您的應用程式是以正確的 可執行 JAR 格式封裝。 如果未正確封裝,您會收到類似下列範例的錯誤訊息: Error: Invalid or corrupt jarfile /jar/11111111-1111-1111-1111-111111111111

我無法部署來源套件

您無法使用 Azure 入口網站 或 Resource Manager 範本來上傳 JAR/來源套件。

當您使用 Azure CLI 部署應用程式套件時,Azure CLI 會定期輪詢部署進度,最後會顯示部署結果。

如果輪詢中斷,您仍然可以使用下列命令來提取建置和部署記錄:

az spring app show-deploy-log --name <app-name>

不過,一個 Azure Spring Apps 服務實例一次只能針對一個來源套件觸發一個建置作業。 如需詳細資訊,請參閱在 Azure Spring Apps 中部署應用程式和設定預備環境。

我的應用程式無法註冊

在大部分情況下,當您的項目物件模型 (POM) 檔案中未正確設定必要的相依性和服務探索,就會發生這種情況。 設定之後,內建的 Service Registry 伺服器端點會插入為應用程式環境變數。 應用程式接著會向 Service Registry 伺服器註冊自己,並探索其他相依應用程式。

等待至少兩分鐘,新註冊的實例才會開始接收流量。

如果您要將現有的 Spring Cloud 型解決方案移轉至 Azure,請務必移除或停用您的臨機操作 服務登錄設定伺服器 實例,以避免與 Azure Spring Apps 所提供的受控實例發生衝突。

您也可以檢查 Azure Log Analytics 中的 Service Registry 客戶端記錄。 如需詳細資訊,請參閱 使用診斷設定分析記錄和計量

若要深入瞭解 Azure Log Analytics,請參閱 開始使用 Azure 監視器中的 Log Analytics。 使用 Kusto 查詢語言來查詢記錄。

我想要檢查應用程式的環境變數

環境變數會通知 Azure Spring Apps 架構,確保 Azure 了解組成應用程式之服務的位置和方式。 確保環境變數正確無誤,是針對潛在問題進行疑難解答的必要第一個步驟。 您可以使用 Spring Boot 執行器端點來檢閱環境變數。

警告

此程式會使用測試端點公開您的環境變數。 如果您的測試端點可供公開存取,或已將功能變數名稱指派給應用程式,請勿繼續進行。

  1. 移至 https://<your-application-test-endpoint>/actuator/health

    類似於 {"status":"UP"} 的回應表示端點已啟用。 如果回應為負數,請在POM.xml檔案中包含下列相依性:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    
  2. 啟用 Spring Boot 執行器端點後,請移至 Azure 入口網站,並尋找應用程式的組態頁面。 新增具有名稱和 MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE*的環境變數。

  3. 重新啟動您的應用程式。

  4. 移至 https://<your-application-test-endpoint>/actuator/env 並檢查回應。 其看起來應該如下:

    {
        "activeProfiles": [],
        "propertySources": {,
            "name": "server.ports",
            "properties": {
                "local.server.port": {
                    "value": 1025
                }
            }
        }
    }
    

尋找名為 systemEnvironment的子節點。 此節點包含應用程式的環境變數。

重要

請記得在讓應用程式可供公用存取之前,先反轉環境變數的曝光。 移至 Azure 入口網站,尋找應用程式的組態頁面,並刪除此環境變數:MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE

我找不到應用程式的計量或記錄

移至 [ 應用程式 ] 以確保應用程式狀態為 [執行 中] 和 [UP]。

檢查您的應用程式套件中是否 啟用 JMX 。 這項功能可以使用 組態屬性 spring.jmx.enabled=true來啟用。

請檢查您的應用程式套件中是否 spring-boot-actuator 啟用相依性,以及它是否成功開機。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

如果您的應用程式記錄可以封存到記憶體帳戶,但無法傳送至 Azure Log Analytics,請檢查您是否已正確設定工作區。 如需詳細資訊,請參閱 建立Log Analytics工作區。 此外,請注意,基本方案不提供服務等級協定(SLA)。 如需詳細資訊,請參閱 在線服務的服務等級協定(SLA)。

企業方案

錯誤112039:無法在 Azure Marketplace 上購買

建立 Azure Spring Apps 企業版方案實例失敗,錯誤碼為「112039」。 如需詳細資訊,請檢查下列清單中的詳細錯誤訊息:

  • 「無法在 Azure Marketplace 上購買,因為 Microsoft.SaaS RP 未在 Azure 訂用帳戶上註冊。」:Azure Spring Apps Enterprise 方案會從 VMware 購買 SaaS 供應專案。

    您必須先註冊資源提供者, Microsoft.SaaS 才能建立 Azure Spring Apps Enterprise 實例。 請參閱如何 註冊資源提供者

  • 「無法在 Azure 訂用帳戶市場載入目錄產品 vmware-inc.azure-spring-cloud-vmware-tanzu-2。」:Azure 訂用帳戶的計費帳戶位址不在支援的位置。

    如需詳細資訊,請參閱沒有方案可供市場「位置>」<使用一節

  • 「由於 Marketplace 法律合約上的簽章驗證,無法在 Azure Marketplace 上購買。 檢查 Azure 訂用帳戶是否已同意 vmware-inc.azure-spring-cloud-vmware-tanzu-2.asa-ent-hr-mtr“ 條款:您的 Azure 訂用帳戶尚未簽署要購買的供應專案和方案條款。

    移至您的 Azure 訂用帳戶,並執行下列 Azure CLI 命令以同意條款:

    az term accept \
        --publisher vmware-inc \
        --product azure-spring-cloud-vmware-tanzu-2 \
        --plan asa-ent-hr-mtr
    

    如果這無濟於事,您可以連絡支援小組,並取得下列資訊。

    • AZURE_TENANT_ID:裝載 Azure 訂用帳戶的 Azure 租使用者識別碼
    • AZURE_SUBSCRIPTION_ID:用來建立 Azure Spring Apps 實例的 Azure 訂用帳戶標識碼
    • SPRING_CLOUD_NAME:失敗的實例名稱
    • ERROR_MESSAGE:觀察到的錯誤訊息

市場「位置>」<沒有可用的方案

當您在 Azure Marketplace 中流覽 SaaS 供應專案 Azure Spring Apps Enterprise 時,可能會如下列影像所示,說「沒有可供市場「<位置>」使用的方案。

Azure 入口網站 的螢幕快照,其中顯示 [沒有方案可供市場使用] 錯誤訊息。

Azure Spring Apps Enterprise 方案需要客戶透過 Azure Marketplace 供應專案支付 Tanzu 元件的授權。 若要在 Azure Marketplace 中購買,Azure 訂用帳戶的計費帳戶國家或地區應位於 SaaS 供應項目支援的地理位置中。

Azure Spring Apps Enterprise 現在支援 Azure Marketplace 支援的所有地理位置。 請參閱商業市集的地理可用性和貨幣支持支援的地理位置一節。

如果您有系統管理員存取權,您可以檢視訂用帳戶的計費帳戶。 請參閱 檢視計費帳戶

我需要 VMware Spring Runtime 支援 (僅限企業方案)

企業方案具有內建的 VMware Spring Runtime 支援,因此如果您認為問題位於 VMware Spring Runtime 支援的範圍內,您可以開啟 VMware 的支援票證。 若要進一步瞭解 VMware Spring Runtime 支援本身,請參閱 VMware Spring Runtime。 如需註冊及使用此支援服務的詳細資訊,請參閱 VMware 企業常見問題中的支援一節。 針對任何其他問題,請向 Microsoft 開啟支援票證。

下一步