Sobes.tech
Middle

Ի՞նչ կլինի կոնտեյների հետ, եթե հիշողության սահմանը գերազանցվի։

sobes.tech AI

Պատասխան AI-ից

Երբ Docker կոնտեյների համար սահմանված հիշողության սահմանաչափը գերազանցվում է, տեղի են ունենում հետևյալ հիմնական իրադարձությունները՝

  1. OOM (Out of Memory) իրադարձություն: Օպերացիոն համակարգի միջուկը հայտնաբերում է, որ կոնտեյների ներսում ընթացող գործընթացը փորձում է հատկացնել հիշողություն, որը գերազանցում է սահմանված սահմանաչափը:
  2. Նշան Killed: Միջուկը ուղարկում է SIGKILL նշան կոնտեյների ներսում գտնվող գործընթացին։ Այս նշանը չի կարող ընկալվել կամ անտեսվել կոնտեյների մեջ աշխատող ծրագրի կողմից:
  3. Կոնտեյների ավարտ: Կոնտեյների ներսում ընթացող գործընթացը ուժեղ կերպով ավարտվում է։ Docker դոմենը հայտնաբերում է, որ հիմնական գործընթացը ավարտվել է և փոխում է կոնտեյների կարգավիճակը՝ Exited:
  4. Ելքային կոդ: Կոնտեյները ավարտվում է ոչ զրո ելքային կոդով (հաճախ 137), ինչը ցույց է տալիս, որ այն ուժեղ կերպով ավարտվել է նշանով:

Հետևանքներ ծրագրի և համակարգի համար:

  • Կոնտեյնում աշխատող ծրագիրը հանկարծակի ավարտվում է:
  • Եթե վերագործարկման քաղաքականություն է սահմանված (restart policy), Docker-ը փորձելու է վերագործարկել կոնտեյները:
  • Կոնտեյների և/կամ հոստի լոգերում գրանցվելու է OOM իրադարձությունը և կոնտեյների ավարտը:

Նմուշային կարգավորումը հիշողության սահմանափակման:

# Docker Compose օրինակ
services:
  myapp:
    image: myimage
    mem_limit: 512m # Սահմանում է 512 ՄԲ հիշողության սահմանափակում
# Docker գործարկման օրինակ
docker run -m 512m myimage # Սահմանում է 512 ՄԲ հիշողության սահմանափակում