Am avut o problemă în curs de desfășurare la rularea unei aplicații web Tomcat java într-un container docker (la care mă refer ca „sarcină” în această postare) găzduit într-un ECS (serviciu de container elastic) pe AWS.
Observăm că sarcina crește la 97% de utilizare a procesorului (folosind valorile AWS) și, deși uneori scade la o utilizare mai mică a procesorului de la sine, sarcina se oprește în general.
Din fericire, ECS generează o nouă sarcină de andocare și pornește din nou aplicația (deși, este nevoie de 5-10 minute pentru ca totul să revină online, ceea ce reprezintă o perioadă uriașă de timp în timpul zilei noastre de producție!)
Nu avem nicio limită superioară pentru sarcina ECS configurată (poate că ar trebui?) â â într-un proiect anterior am crescut CPU pe gazda ECS de la 8 vCPU, la 32 vCPU și, desigur, acest docker special sarcina a urcat la 97% din procesorul gazdă ECS în mod persistent pe tot parcursul proiectului.
Săptămâna aceasta am mărit CPU-ul de la 8 vCPU, la 16 vCPU (și o memorie de 64 GB).
Și văd același lucru. Am crescut limita de memorie soft a sarcinii la 4 GB (a fost setat inițial la 2 GB) și văd că utilizarea memoriei crește, dar cu siguranță nu depășește aproximativ 6 GB.
Urmând urmărirea stivei, (care este prea lungă pentru a fi postată), nu există nicio eroare de memorie lipsită înregistrată de aplicația tomcat/java.
De obicei, începe cu o eroare JDBC (conexiuni maxime/pool epuizat), apoi lucrurile sunt anulate, sistemul de înregistrare se închide etc.
Gazda ECS închide sarcina sau sarcina se închide după ce atinge constrângerile CPU/memorie (java/tomcat se închide)? În plus, în jurnalul agentului nostru ECS pot vedea o declarație despre „Ieșirea 143” -- terminarea sarcinii din ECS sau containerul însuși iese? Cel mai bine ar fi să setați o limită superioară a CPU pentru sarcină (în ceea ce privește memoria JVM, folosind tot ce este disponibil pentru aceasta)?