Azure Spring Apps 常見問題疑難排解
注意
基本、標準和企業方案將從 2025 年 3 月中旬開始淘汰,並停用 3 年。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 Azure Spring Apps 淘汰公告。
標準 耗用量和專用 方案將從 2024 年 9 月 30 日起淘汰,並在六個月後完成關閉。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 將 Azure Spring Apps 標準取用和專用方案遷移至 Azure Container Apps。
本文適用於: ✔️ 基本/標準 ✔️ 企業
本文針對 Azure Spring Apps 的開發問題,提供疑難排解指引。 如需詳細資訊,請參閱 Azure Spring 應用程式常見問題。
可用性、效能和應用程式問題
我的應用程式無法啟動
當您的應用程式無法啟動,可能是端點無法連線,或在幾次重試之後傳回 502。
如需疑難排解,請將記錄匯出至 Azure Log Analytics。 Spring 應用程式記錄資料表的名稱為 AppPlatformLogsforSpring。 若要深入瞭解,請參閱:使用診斷設定分析記錄和計量。
您的記錄可能會出現下列錯誤訊息: org.springframework.context.ApplicationContextException: Unable to start web server
該訊息表示下列其中一種可能問題:
- 其中一個 Bean 遺漏或其一個相依性遺漏。
- 其中一個 Bean 屬性遺漏或無效。 在此案例下會顯示「java.lang.IllegalArgumentException」。
服務的繫結也可能會導致應用程式啟動失敗。 若要查詢記錄,請使用與繫結服務相關的關鍵字。 例如,假設您的應用程式已繫結至 MySQL 執行個體,而此執行個體已設定為本機系統時間。 如果應用程式無法啟動,記錄檔中可能會出現下列錯誤訊息:
java.sql.SQLException:伺服器時區的值 Coordinated Universal Time 無法辨識,或代表多個時區。
若要修正此錯誤,請移至 MySQL 執行個體的 server parameters
,並將 time_zone
的值由 SYSTEM 變更為 +0:00。
我的應用程式損毀或擲回未預期的錯誤
當偵錯應用程式損毀時,請先檢查應用程式的執行狀態和探索狀態。 若要這樣做,在 Azure 入口網站中移至 [應用程式],確定所有應用程式的狀態為 [執行中] 且 [已啟動]。
如果探索狀態為 [已啟動],請移至 [計量] 來檢查應用程式的健康情況。 檢查下列計量:
tomcat.global.error
:這裡統計所有 Spring 應用程式的例外狀況。 如果此數目很大,請移至 [Azure Log Analytics] 來檢查您的應用程式記錄。
jvm.memory.max
:應用程式可使用記憶體的最大數量。 該數量可能未定義,或隨時間有不同的定義。 如果已定義,則已使用和已認可的記憶體數量,一定會小於或等於 可使用的最大數量。 然而,記憶體配置可能會失敗,並導致錯誤訊息
OutOfMemoryError
。原因來自於已使用記憶體的配置錯誤 (已使用>已認可記憶體,儘管已使用記憶體仍然< = max )。 在這種情況下,請嘗試使用參數-Xmx
,來提高堆積大小的上限。jvm.memory.used
:應用程式目前已使用的記憶體數量 (以位元組為單位)。 若在一般負載的 JAVA 應用程式,計量序列會形成重複的鋸齒模式。該模式中,記憶體使用量會穩定的遞增或遞減,然後突然大幅下降。 該計量序列產生的原因,來自於 JAVA 虛擬機器內部的記憶體回收,模式中的下降的部分即代表回收動作。
該計量對於判別記憶體問題很有幫助,例如:
- 一開始就發生記憶體暴增。
- 特定邏輯路徑的記憶體配置加劇上升。
- 記憶體逐漸流失。
如需詳細資訊,請參閱:計量。
注意
這些計量僅適用於 Spring Boot 應用程式。 若要啟用這些計量,請新增
spring-boot-starter-actuator
相依性。 如需詳細資訊,請參閱使用 Spring Boot Actuator 管理及監視應用程式的新增傳動器相依性一節。如果應用程式無法啟動,請檢查應用程式是否具有有效的 jvm 參數。 如果 jvm 記憶體設置過高,您的記錄可能會出現下列錯誤訊息:
「所需記憶體 2728741K 大於 2000M 的可配置記憶體」
若要深入瞭解 Azure Log Analytics,請參閱:開始在 Azure 監視器中使用 Log Analytics 。
我的應用程式遇到高 CPU 使用量或高記憶體使用量
如果您的應用程式遇到高 CPU 或記憶體使用量,則屬於下列其中一種狀況:
- 所有應用程式執行個體,都遇到高 CPU 或記憶體使用量。
- 部分應用程式執行個體,遇到高 CPU 或記憶體使用量。
若要確定屬於何種情況,請使用下列步驟:
- 移至 [計量],然後選取 [服務 CPU 使用量百分比] 或 [已使用的服務記憶體]。
- 新增 App= 篩選條件,以指定您要監視的應用程式。
- 依據執行個體分割計量。
如果所有執行個體都遇到高 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/執行個體) 符合應用程式提供者設定的最低需求。
- 設定項目具有預期的值。 如需詳細資訊,請參閱:為您的服務設定 Spring Cloud Config Server 執行個體。 針對企業方案,請參閱使用應用程式設定服務。
- 環境變數具有預期值。
- JVM 參數具有預期值。
- 建議您從應用程式封裝中,停用或移除內嵌的 Config Server 和 Spring Service Registry 服務。
- 如果要透過服務繫結來繫結任何 Azure 資源,請確定目標資源已啟動且正在執行中。
設定和管理
我在建立 Azure Spring Apps 服務執行個體時遇到問題
當您在 Azure 入口網站設定 Azure Spring Apps 服務實例時,Azure Spring Apps 會為您執行驗證。
但是,若您嘗試使用 Azure CLI 或 Azure Resource Manager 範本來設定 Azure Spring 應用程式服務執行個體,請確認您符合下列條件:
- 訂用帳戶是作用中狀態。
- Azure Spring 應用程式在您使用的區域可取得。 如需詳細資訊,請參閱 Azure Spring Apps 常見問題集。
- 已經建立執行個體的資源群組。
- 資源名稱符合命名規則。 名稱只能包含小寫字母、數字及連字號。 第一個字元必須是字母。 最後一個字元必須是字母或數位。 必須包含 2 到 32 個字元。
如果您想要使用 Resource Manager 範本來設定 Azure Spring Apps 的服務執行個體,請先參閱:了解 Azure Resource Manager 範本的結構和語法。
Azure Spring 應用程式服務執行個體的名稱用於在 azuremicroservices.io
下要求子網域名稱,因此如果此名稱與現有名稱衝突,設定將會失敗。 您可以在活動記錄中找到更多詳細資料。
我無法部署 .NET Core 應用程式
您無法透過 Azure 入口網站或 Resource Manager 範本,上傳 .NET Core Steeltoe 應用程式的 .zip 檔。
當您使用 Azure CLI 部署應用程式封裝時, Azure CLI 會定期輪詢部署進度,最後會顯示部署結果。
請確認您的應用程式,是以正確的 .zip 檔案格式封裝。 如果未正確封裝,流程會停止回應,或者您會收到錯誤訊息。
我無法部署 JAR 封裝
您無法使用 Azure 入口網站 或 Resource Manager 範本,上傳 JAVA 封存檔案 (JAR) 或 source 封裝。
當您使用 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 範本,上傳 JAVA 封存檔案 (JAR) 或 source 封裝。
當您使用 Azure CLI 部署應用程式套件時, Azure CLI 會定期輪詢部署進度,最後會顯示部署結果。
如果輪詢中斷,您仍然可以使用下列命令來提取建置和部署記錄:
az spring app show-deploy-log --name <app-name>
不過,一個 Azure Spring 應用程式服務執行個體,一次只能針對一個來源封裝,觸發一個組建作業。 如需詳細資訊,請參閱:應用程式部署,以及在 Azure Spring Apps 中設定預備環境。
我的應用程式無法註冊
大部分的案例中,如果您的專案物件模型 (POM) 檔案,未能正確設定必要的相依性和服務探索時,該情況就會發生。 設定後,內建的 Service Registry 伺服器端點,會以環境變數的形式插入為您的應用程式。 應用程式即可向 Service Registry 伺服器為自己註冊,並探索其他相依的應用程式。
等待至少 2 分鐘後,新註冊的執行個體會開始接收流量。
如果您要將現有的 Spring 雲端式解決方案移轉至 Azure,請確認您臨機的服務登錄和 Config Server 執行個體都已移除 (或停用),以避免與 Azure Spring 應用程式所提供的受控執行個體發生衝突。
您也可以在 Azure Log Analytics 中檢查服務登錄的用戶端記錄。 若要深入瞭解,請參閱:使用診斷設定分析記錄和計量。
若要深入瞭解 Azure Log Analytics,請參閱:開始在 Azure 監視器中使用 Log Analytics 。 請使用Kusto查詢語言以查詢記錄。
我想要檢查應用程式的環境變數
環境變數說明 Azure Spring Cloud 的架構,此確保 Azure 掌握應用程式組成服務的設定位置和方式。 確保環境變數正確是針對潛在問題進行疑難排解的第一步。 您可以使用 Spring Boot Actuator 端點來檢查您的環境變數。
警告
此程序會利用測試端點來公開您的環境變數。 如果您的測試端點可公開存取,或您已將網域名稱指派給您的應用程式,則請勿繼續執行該作業。
移至
https://<your-application-test-endpoint>/actuator/health
。類似於
{"status":"UP"}
的回應會指出端點已啟用。 如果回應並非已啟用,請在 POM.xml 中加入下列相依性:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
啟用 Spring Boot Actuator 的端點後,請移至 Azure 入口網站,並尋找應用程式的設定頁面。 新增名稱
MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE
和值*
的環境變數。重新啟動您的應用程式。
移至
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
。
我找不到應用程式的計量或記錄
請移至 [應用程式],確認應用程式的狀態為 [執行中] 且 [已啟動]。
檢視您的應用程式封裝是否已啟用 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)。
Enterprise 方案
錯誤112039:無法在 Azure Marketplace 上購買
建立 Azure Spring 應用程式企業方案執行個體失敗,並出現錯誤碼「112039」。 如需詳細資訊,請檢查下列清單中的詳細錯誤訊息:
「由於 Azure 訂用帳戶未註冊 Microsoft.SaaS RP,導致在 Azure Marketplace 上購買失敗。」:Azure Spring 應用程式企業方案向 VMWare 購買 SaaS 供應項目。
您必須先向
Microsoft.SaaS
資源提供者註冊,才能建立 Azure Spring 應用程式企業版執行個體。 了解如何向資源提供者註冊。「無法載入 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 應用程式企版時,可能會看到「市場無可供方案<『位置』>」,如下圖所示。
Azure Spring 應用程式企業方案需要客戶透過 Azure Marketplace 供應項目支付 Tanzu 元件的授權。 若要在 Azure Marketplace 購買,Azure 訂閱的計費帳戶國家或地區,應位於 SaaS 供應項目所支援的地理位置。
Azure Spring 應用程式企業版現在支援 Azure Marketplace 支援的所有地理位置。 請參閱商業市集的地理可用性和貨幣支援的支援的地理位置一節。
如果您有系統管理員存取權,您可以檢視訂閱的計費帳戶。 請參閱:檢視計費帳戶。
我需要 VMWare Spring Runtime 支援 (僅限企業方案)
企業方案具有內建的 VMWare Spring Runtime 支援,因此如果您認為問題在 VMWare Spring Runtime 支援的範圍內,可以向 VMWare 開啟支援票證。 若要更加了解 VMware Spring Runtime 支援,請參閱 VMware Spring Runtime。 如需註冊及使用此支援服務的詳細資訊,請參閱 VMWare 企業版常見問題中的「支援」一節。 若為其他問題,請向 Microsoft 開啟支援票證。