Sobes.tech
Middle

Čo sa stane s kontajnerom, ak bude prekročen limit pamäte?

sobes.tech AI

Odpoveď od AI

Keď je prekročený limit pamäte nastavený pre Docker kontajner, dochádza k nasledujúcim hlavným udalostiam:

  1. Udalosť OOM (Out of Memory): Jadro operačného systému zistí, že proces vnútri kontajnera sa pokúša alokovať pamäť, ktorá presahuje stanovený limit.
  2. Signál Killed: Jadro odošle procesu vnútri kontajnera signál SIGKILL. Tento signál nemôže byť zachytený alebo ignorovaný aplikáciou bežiacou v kontajneri.
  3. Ukončenie kontajnera: Proces vnútri kontajnera je nútene ukončený. Demon Docker zistí, že hlavný proces kontajnera skončil, a zmení stav kontajnera na Exited.
  4. Kód ukončenia: Kontajner skončí s nenulovým kódom ukončenia (zvyčajne 137), čo naznačuje, že bol nútene ukončený signálom.

Dôsledky pre aplikáciu a systém:

  • Aplikácia bežiaca v kontajneri sa náhle ukončí.
  • Ak je nastavená politika reštartu (restart policy), Docker sa pokúsi kontajner reštartovať.
  • V logoch kontajnera a/alebo hostiteľa bude zaznamenané udalosti OOM a ukončenie kontajnera.

Príklad nastavenia limitu pamäte:

# Príklad Docker Compose
services:
  myapp:
    image: myimage
    mem_limit: 512m # Nastaví limit pamäte na 512 MB
# Príklad príkazu Docker
docker run -m 512m myimage # Nastaví limit pamäte na 512 MB