Felsöka vanliga Problem med Azure Spring Apps
Kommentar
Basic-, Standard- och Enterprise-planerna kommer att vara inaktuella från och med mitten av mars 2025, med en 3-årig pensionsperiod. Vi rekommenderar att du övergår till Azure Container Apps. Mer information finns i meddelandet om azure Spring Apps-pensionering.
Standardförbrukningen och den dedikerade planen kommer att vara inaktuell från och med den 30 september 2024, med en fullständig avstängning efter sex månader. Vi rekommenderar att du övergår till Azure Container Apps. Mer information finns i Migrera Azure Spring Apps Standard-förbrukning och dedikerad plan till Azure Container Apps.
Den här artikeln gäller för: ✔️ Basic/Standard ✔️ Enterprise
Den här artikeln innehåller instruktioner för felsökning av problem med Azure Spring Apps-utveckling. Mer information finns i Vanliga frågor och svar om Azure Spring Apps.
Problem med tillgänglighet, prestanda och program
Mitt program kan inte starta
När programmet inte kan starta kan det hända att dess slutpunkt inte kan anslutas eller att den returnerar 502 efter några återförsök.
Exportera loggarna till Azure Log Analytics för felsökning. Tabellen för Spring-programloggar heter AppPlatformLogsforSpring. Mer information finns i Analysera loggar och mått med diagnostikinställningar.
Följande felmeddelande kan visas i loggarna: org.springframework.context.ApplicationContextException: Unable to start web server
Meddelandet anger ett av två troliga problem:
- En av bönorna eller ett av dess beroenden saknas.
- En av egenskaperna för bönor saknas eller är ogiltig. I det här fallet visas "java.lang.IllegalArgumentException".
Tjänstbindningar kan också orsaka programstartfel. Om du vill köra frågor mot loggarna använder du nyckelord som är relaterade till de bundna tjänsterna. Anta till exempel att ditt program har en bindning till en MySQL-instans som är inställd på lokal systemtid. Om programmet inte startar kan följande felmeddelande visas i loggen:
"java.sql.SQLException: Serverns tidszonsvärde "Coordinated Universal Time" är okänt eller representerar mer än en tidszon."
Åtgärda det här felet genom att gå till MySQL-instansen server parameters
time_zone
och ändra värdet från SYSTEM till +0:00.
Mina program kraschar eller genererar ett oväntat fel
När du felsöker programkrascher börjar du med att kontrollera programmets status och identifieringsstatus. Om du vill göra det går du till Appar i Azure Portal för att se till att statusen för alla program körs och ÄR IGÅNG.
Om statusen körs men identifieringsstatusen inte är UP går du till avsnittet "Mitt program kan inte registreras".
Om identifieringsstatusen är UP går du till Mått för att kontrollera programmets hälsa. Granska följande mått:
tomcat.global.error
:Alla Spring-program undantag räknas här. Om det här antalet är stort går du till Azure Log Analytics för att granska programloggarna.
jvm.memory.max
:Den maximala mängden minne som är tillgängligt för programmet. Beloppet kan vara odefinierat eller ändras med tiden om det har definierats. Om den definieras är mängden använt och incheckat minne alltid mindre än eller lika med max. En minnesallokering kan dock misslyckas med ett
OutOfMemoryError
meddelande om allokeringen försöker öka det använda minnet så att det används > , även om det används <= max fortfarande är sant. I sådana fall kan du försöka öka den maximala heapstorleken med hjälp av parametern-Xmx
.jvm.memory.used
:Mängden minne i byte som för närvarande används av programmet. För ett Java-program med normal belastning utgör den här måttserien ett sågtandsmönster , där minnesanvändningen stadigt ökar och minskar i små steg och plötsligt sjunker mycket, och sedan återkommer mönstret. Den här måttserien inträffar på grund av skräpinsamling i den virtuella Java-datorn, där insamlingsåtgärder representerar minskningar i sågtooth-mönstret.
Det här måttet är viktigt för att identifiera minnesproblem, till exempel:
- En minnesexplosion i början.
- Överspänningsminnesallokeringen för en specifik logiksökväg.
- Gradvisa minnesläckor.
Mer information finns i Mått.
Kommentar
Dessa mått är endast tillgängliga för Spring Boot-program. Om du vill aktivera dessa mått lägger du till beroendet
spring-boot-starter-actuator
. Mer information finns i avsnittet Lägg till aktuatorberoende i Hantera och övervaka app med Spring Boot-aktuator.Om programmet inte startar kontrollerar du att programmet har giltiga jvm-parametrar. Om jvm-minnet är för högt kan följande felmeddelande visas i loggarna:
"krävs minne 2728741K är större än 2000M tillgängligt för allokering"
Mer information om Azure Log Analytics finns i Kom igång med Log Analytics i Azure Monitor.
Mitt program använder stora mängder CPU- eller minnesresurser
Om ditt program har hög processor- eller minnesanvändning är en av två saker sant:
- Alla appinstanser har hög processor- eller minnesanvändning.
- Vissa appinstanser har hög processor- eller minnesanvändning.
Använd följande steg för att ta reda på vilken situation som gäller:
- Gå till Mått och välj sedan antingen Användningsprocent för tjänstprocessor eller Tjänstminne som används.
- Lägg till ett App= -filter för att ange vilket program du vill övervaka.
- Dela upp måtten efter instans.
Om alla instanser har hög processor- eller minnesanvändning måste du antingen skala ut programmet eller skala upp cpu- eller minnesanvändningen. Mer information finns i Självstudie: Skala ett program i Azure Spring Apps.
Om vissa instanser har hög processor- eller minnesanvändning kontrollerar du instansstatusen och dess identifieringsstatus.
Mer information finns i Mått för Azure Spring Apps.
Om alla instanser är igång går du till Azure Log Analytics för att fråga dina programloggar och granska kodlogik. Den här granskningen hjälper dig att se om någon av dem kan påverka skalningspartitionering. Mer information finns i Analysera loggar och mått med diagnostikinställningar.
Mer information om Azure Log Analytics finns i Kom igång med Log Analytics i Azure Monitor. Fråga loggarna med hjälp av Kusto-frågespråket.
Checklista för att distribuera din Spring-app till Azure Spring Apps
Innan du registrerar programmet måste du se till att det uppfyller följande kriterier:
- Programmet kan köras lokalt med den angivna Java-körningsversionen.
- Miljökonfigurationen (CPU/RAM/instanser) uppfyller minimikravet som angetts av programleverantören.
- Konfigurationsobjekten har sina förväntade värden. Mer information finns i Konfigurera en Spring Cloud Config Server-instans för din tjänst. Information om Enterprise-planen finns i Använda programkonfigurationstjänsten.
- Miljövariablerna har sina förväntade värden.
- JVM-parametrarna har sina förväntade värden.
- Vi rekommenderar att du inaktiverar eller tar bort de inbäddade Config Server - och Spring Service Registry-tjänsterna från programpaketet.
- Om några Azure-resurser ska bindas via tjänstbindning kontrollerar du att målresurserna är igång.
Konfiguration och hantering
Jag stötte på ett problem med att skapa en Azure Spring Apps-tjänstinstans
När du konfigurerar en Azure Spring Apps-tjänstinstans med hjälp av Azure Portal utför Azure Spring Apps verifieringen åt dig.
Men om du försöker konfigurera Azure Spring Apps-tjänstinstansen med hjälp av Azure CLI eller Azure Resource Manager-mallen kontrollerar du att du uppfyller följande villkor:
- Prenumerationen är aktiv.
- Azure Spring Apps är tillgängligt i den region du använder. Mer information finns i Vanliga frågor och svar om Azure Spring Apps.
- Resursgruppen för instansen har redan skapats.
- Resursnamnet överensstämmer med namngivningsregeln. Namnet får endast innehålla gemener, siffror och bindestreck. Det första tecknet måste vara en bokstav. Det sista tecknet måste vara en bokstav eller en siffra. Värdet måste innehålla mellan 2 och 32 tecken.
Om du vill konfigurera Azure Spring Apps-tjänstinstansen med hjälp av Resource Manager-mallen läser du först Förstå strukturen och syntaxen för Azure Resource Manager-mallar.
Namnet på Azure Spring Apps-tjänstinstansen används för att begära ett underdomännamn under azuremicroservices.io
, så installationen misslyckas om namnet står i konflikt med ett befintligt namn. Du kan hitta mer information i aktivitetsloggarna.
Jag kan inte distribuera en .NET Core-app
Du kan inte ladda upp en .zip fil för en .NET Core Steeltoe-app med hjälp av Azure Portal eller Resource Manager-mallen.
När du distribuerar programpaketet med hjälp av Azure CLI avsöker Azure CLI regelbundet distributionsframsteget och i slutändan visar det distributionsresultatet.
Kontrollera att programmet är paketerat i rätt .zip filformat. Om den inte är korrekt paketerad slutar processen att svara eller så får du ett felmeddelande.
Jag kan inte distribuera ett JAR-paket
Du kan inte ladda upp Java Archive-filen (JAR)/källpaketet med hjälp av mallen Azure Portal eller Resource Manager.
När du distribuerar programpaketet med hjälp av Azure CLI avsöker Azure CLI regelbundet distributionsframsteget och i slutändan visar det distributionsresultatet.
Om avsökningen avbryts kan du fortfarande använda följande kommando för att hämta distributionsloggarna:
az spring app show-deploy-log --name <app-name>
Kontrollera att programmet är paketerat i rätt körbart JAR-format. Om det inte är korrekt paketerat får du ett felmeddelande som liknar följande exempel: Error: Invalid or corrupt jarfile /jar/11111111-1111-1111-1111-111111111111
.
Jag kan inte distribuera ett källpaket
Du kan inte ladda upp JAR/källpaket med hjälp av Azure Portal eller Resource Manager-mallen.
När du distribuerar programpaketet med hjälp av Azure CLI avsöker Azure CLI regelbundet distributionsframsteget och i slutändan visar det distributionsresultatet.
Om avsökningen avbryts kan du fortfarande använda följande kommando för att hämta bygg- och distributionsloggarna:
az spring app show-deploy-log --name <app-name>
En Azure Spring Apps-tjänstinstans kan dock bara utlösa ett byggjobb för ett källpaket i taget. Mer information finns i Distribuera ett program och Konfigurera en mellanlagringsmiljö i Azure Spring Apps.
Mitt program kan inte registreras
I de flesta fall inträffar den här situationen när Nödvändiga beroenden och Tjänstidentifiering inte är korrekt konfigurerade i din POM-fil (Project Object Model). När den har konfigurerats matas den inbyggda Service Registry-serverslutpunkten in som en miljövariabel med ditt program. Program registrerar sig sedan med Service Registry-servern och identifierar andra beroende program.
Vänta minst två minuter innan en nyregistrerad instans börjar ta emot trafik.
Om du migrerar en befintlig Spring Cloud-baserad lösning till Azure måste du ta bort eller inaktivera ad hoc-tjänstregistret och konfigurationsserverinstanserna för att undvika konflikter med de hanterade instanser som tillhandahålls av Azure Spring Apps.
Du kan också kontrollera tjänstregistrets klientloggar i Azure Log Analytics. Mer information finns i Analysera loggar och mått med diagnostikinställningar
Mer information om Azure Log Analytics finns i Kom igång med Log Analytics i Azure Monitor. Fråga loggarna med hjälp av Kusto-frågespråket.
Jag vill granska programmets miljövariabler
Miljövariabler informerar Azure Spring Apps-ramverket och ser till att Azure förstår var och hur du konfigurerar de tjänster som utgör ditt program. Att se till att miljövariablerna är korrekta är ett nödvändigt första steg för att felsöka potentiella problem. Du kan använda Spring Boot-aktuatorslutpunkten för att granska dina miljövariabler.
Varning
Den här proceduren exponerar miljövariablerna med hjälp av testslutpunkten. Fortsätt inte om testslutpunkten är offentligt tillgänglig eller om du har tilldelat ditt program ett domännamn.
Gå till
https://<your-application-test-endpoint>/actuator/health
.Ett svar som liknar
{"status":"UP"}
anger att slutpunkten har aktiverats. Om svaret är negativt inkluderar du följande beroende i din POM.xml-fil :<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
När Spring Boot-aktuatorslutpunkten är aktiverad går du till Azure Portal och letar efter konfigurationssidan för ditt program. Lägg till en miljövariabel med namnet
MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE
och värdet*
.Starta om programmet.
Gå till
https://<your-application-test-endpoint>/actuator/env
och inspektera svaret. Den bör se ut så här:{ "activeProfiles": [], "propertySources": {, "name": "server.ports", "properties": { "local.server.port": { "value": 1025 } } } }
Leta efter den underordnade noden med namnet systemEnvironment
. Den här noden innehåller programmets miljövariabler.
Viktigt!
Kom ihåg att ändra exponeringen för dina miljövariabler innan du gör programmet tillgängligt för allmänheten. Gå till Azure Portal, leta efter konfigurationssidan för ditt program och ta bort den här miljövariabeln: MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE
.
Jag kan inte hitta mått eller loggar för mitt program
Gå till Appar för att se till att programstatusen körs och ÄR IGÅNG.
Kontrollera om JMX är aktiverat i programpaketet. Den här funktionen kan aktiveras med konfigurationsegenskapen spring.jmx.enabled=true
.
Kontrollera om beroendet spring-boot-actuator
är aktiverat i programpaketet och att det har startats.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Om dina programloggar kan arkiveras till ett lagringskonto men inte skickas till Azure Log Analytics kontrollerar du om du har konfigurerat arbetsytan korrekt. Mer information finns i Skapa en Log Analytics-arbetsyta. Tänk också på att Basic-planen inte tillhandahåller något serviceavtal (SLA). Mer information finns i ServiceNivåavtal (SLA) för onlinetjänster.
Enterprise-plan
Fel 112039: Det gick inte att köpa på Azure Marketplace
Det går inte att skapa en Azure Spring Apps Enterprise-planinstans med felkoden "112039". Mer information finns i det detaljerade felmeddelandet i följande lista:
"Det gick inte att köpa på Azure Marketplace eftersom Microsoft.SaaS RP inte är registrerat i Azure-prenumerationen.": Azure Spring Apps Enterprise-abonnemanget köper ett SaaS-erbjudande från VMware.
Du måste registrera
Microsoft.SaaS
resursprovidern innan du skapar Azure Spring Apps Enterprise-instansen. Se hur du registrerar en resursprovider."Det gick inte att läsa in katalogprodukten vmware-inc.azure-spring-cloud-vmware-tanzu-2 på Azure-prenumerationsmarknaden.": Din Azure-prenumerations faktureringskontoadress finns inte på den plats som stöds.
Mer information finns i avsnittet Inga planer är tillgängliga för marknaden "<Plats>".
"Det gick inte att köpa på Azure Marketplace på grund av signaturverifiering i marketplace-juridiska avtal. Kontrollera att Azure-prenumerationen har avtalsvillkor för vmware-inc.azure-spring-cloud-vmware-tanzu-2.asa-ent-hr-mtr": Din Azure-prenumeration har inte signerat villkoren för erbjudandet och planerar att köpas.
Gå till din Azure-prenumeration och kör följande Azure CLI-kommando för att godkänna villkoren:
az term accept \ --publisher vmware-inc \ --product azure-spring-cloud-vmware-tanzu-2 \ --plan asa-ent-hr-mtr
Om det inte hjälper kan du kontakta supportteamet med följande information.
AZURE_TENANT_ID
: Det Azure-klient-ID som är värd för Azure-prenumerationenAZURE_SUBSCRIPTION_ID
: Det Azure-prenumerations-ID som användes för att skapa Azure Spring Apps-instansenSPRING_CLOUD_NAME
: namnet på den misslyckade instansenERROR_MESSAGE
: det observerade felmeddelandet
Inga planer är tillgängliga för marknadens "<plats>"
När du besöker SaaS-erbjudandet Azure Spring Apps Enterprise på Azure Marketplace kan det stå "Inga planer är tillgängliga för marknadens "<Plats>" som i följande bild.
Azure Spring Apps Enterprise-planen kräver att kunderna betalar för en licens till Tanzu-komponenter via ett Azure Marketplace-erbjudande. Om du vill köpa på Azure Marketplace ska faktureringskontots land eller region för din Azure-prenumeration finnas på SaaS-erbjudandets geografiska platser som stöds.
Azure Spring Apps Enterprise stöder nu alla geografiska platser som Azure Marketplace stöder. Se avsnittet Geografiska platser som stöds i Stöd för geografisk tillgänglighet och valuta för den kommersiella marknadsplatsen.
Du kan visa faktureringskontot för din prenumeration om du har administratörsåtkomst. Se Visa faktureringskonton.
Jag behöver VMware Spring Runtime-support (endast Enterprise-plan)
Enterprise-planen har inbyggd VMware Spring Runtime-support, så att du kan öppna supportärenden till VMware om du tror att problemet ligger i omfånget för VMware Spring Runtime Support. Mer information om VMware Spring Runtime Support finns i VMware Spring Runtime. Mer information om hur du registrerar och använder den här supporttjänsten finns i avsnittet Support i Vanliga frågor och svar om företag från VMware. Om du har andra problem öppnar du ett supportärende med Microsoft.