Java.lang.VirtualMachineError kastes, når en virtuel Java-maskine støder på en intern fejl eller ressourcebegrænsning, der forhindrer den i at fungere. Det er en selvforsvarsmekanisme, der anvendes af JVM for at forhindre, at hele applikationen går ned. I denne artikel vil jeg diskutere de mange forskellige typer VirtualMachineError, deres egenskaber, forskellige grunde til, at de udløses, og flere potentialeløsninger til at rette dem.
typer af VirtualMachineError
der er fire forskellige typer VirtualMachineError:
- OutOfMemoryError
- Stackoverflorror
- InternalError
- ukendt fejl
lad os gennemgå disse typer i detaljer i dette afsnit.
næste GENERATION DEVOPS: VALUE STREAM MANAGEMENT
Helen Beal (DevOps Institute.)
Sådan vokser du dit serverløse TEAM
Sheen Brisals (LEGO Gruppen)
MLOPS: kontinuerlig levering af MASKINLÆRINGSSYSTEMER
Hauke Brammer (finpair GmbH)
Fig: Java kastbar klasse hierarki
OutOfMemoryError
ligesom OMG (Oh My God) akronym, OOM (OutOfMemoryError) er ganske populær blandt DevOps samfund. Mens de fleste DevOps-ingeniører måske tror, at der kun er en OutOfMemoryError, der er faktisk otte forskellige smag af OutOfMemoryError:
- java.lang.OutOfMemoryError: Java bunke plads
- java.lang.OutOfMemoryError: GC Overhead grænse overskredet
- java.lang.OutOfMemoryError: anmodet array størrelse overstiger VM grænse
- java.lang.OutOfMemoryError: Permgen plads
- java.lang.OutOfMemoryError: Metaspace
- java.lang.OutOfMemoryError: kan ikke oprette ny indbygget tråd
- java.lang.OutOfMemoryError: Dræb proces eller ofre barn
- java.lang.OutOfMemoryError: årsag stack_trace_med_native_method
hver fejl udløses af forskellige årsager. Tilsvarende varierer løsninger til disse fejl baseret på hvilken slags smag af OutOfMemoryError problem det er. Her er et smukt dokument på en side, der opsummerer alle forskellige former for fejl, deres årsager og løsninger.
generelt kan OutOfMemoryError diagnosticeres og rettes ved at analysere affaldsindsamlingslogfiler og dynger. Da det kan være kedeligt at analysere Affaldsindsamlingslogfiler manuelt, kan du overveje at bruge gratis værktøjer som GCeasy, HP JMeter eller IBM GC-analysator. På samme måde kan du overveje at bruge gratis værktøjer som HeapHero eller Eclipse MAT til at analysere dynger.
se også: Stackoverflorror: Årsager & løsninger
Stackoverflorgerror
en tråds stack stack gemmer oplysninger om de metoder, den udfører, primitive datatypeværdier, lokale variabler, objektpegere og returværdier. Alle disse ting forbruger hukommelse. Hvis en tråds stakstørrelser vokser ud over den tildelte hukommelsesgrænse, så java.lang.Stackoverflorror er kastet. Dette problem opstår typisk, når en tråd rekursivt påberåber sig samme funktion igen og igen på grund af en fejl i det udførende program. Flere detaljer om, hvordan du debugger Stackoverflorror og alle mulige løsninger til at rette itc og være her.
InternalError
java.lang.InternalError kastes af JVM af tre grunde. Hvis der er en fejl i programmet, der implementerer den virtuelle maskine, en fejl i det underliggende værtssystemprogram eller en fejl i udstyret.
det er dog sjældent at støde på denne form for Internfejl. For at forstå, hvilke specifikke scenarier der kan forårsage InternalError, skal du søge efter ‘InternalError’ – strengen i Oracles Java Bug-database. På tidspunktet for skrivningen af denne artikel (20.December 2018) er der kun rapporteret 200 fejl for denne fejl i Oracles Java Bug-database. De fleste af dem er faste. Så bekymre dig ikke for meget om denne!
ukendt fejl
java.lang.Ukendt fejl kastes, når der er opstået en undtagelse eller fejl, men Java virtual machine kan ikke rapportere den faktiske undtagelse eller fejl. Den ukendte fejl forekommer sjældent. Faktisk, når du søger efter’ Ukendt fejl ‘ i Oracle Java Bug database, var der kun 2 fejl fundet rapporteret.
SE OGSÅ: Fjernfejlfinding til Java-applikationer
egenskaber
VirtualMachineError har par primære egenskaber:
- ukontrollerede undtagelser
- synkron & asynkron levering
lad os diskutere disse to egenskaber i dette afsnit.
ikke-markerede undtagelser
der er to typer undtagelser: markeret og ikke markeret.
undtagelser, der kontrolleres på kompileringstidspunktet, kaldes markeret undtagelse. Hvis nogle metoder i din kode kaster en kontrolleret undtagelse, skal metoden enten håndtere undtagelsen, eller den skal angive undtagelsen ved hjælp af nøgleordet ‘kast’. Eksempler på de kontrollerede undtagelser er: Ioundtagelse, ordblindhed, Dataadgangsundtagelse, Classnotfoundundtagelse og meget mere.
ukontrollerede undtagelser har ikke dette krav. De behøver ikke at blive fanget eller erklæret kastet. Alle typer VirtualMachineError er ukontrollerede undtagelser.
synkron& asynkron levering
undtagelser kan kastes i to tilstande: synkron og asynkron.
synkrone undtagelser sker ved en bestemt programerklæring, uanset hvor mange gange programmet er blevet udført i lignende miljø. Eksempler på synkrone undtagelser er ting som Nullpointerundtagelse, Arrayindeksoutofboundundtagelse osv.
asynkrone undtagelser kan ske på ethvert tidspunkt og i enhver del af programopgørelsen. Der er ingen sammenhæng, hvor det kan kastes. Alle de Virtuellemaskinefejl kastes asynkront, men nogle gange kan de også kastes synkront. Stackoverflorror kan kastes synkront ved metodeindkaldelse såvel som asynkront på grund af indbygget metodeudførelse eller Java Virtual Machine-ressourcebegrænsninger. Tilsvarende kan OutOfMemoryError kastes synkront under objektoprettelse, array-oprettelse, klasseinitialisering og boksekonvertering såvel som asynkront.