Назад к вопросам
Middle
72
questionbank

Что произойдет с контейнером, если будет превышен лимит по памяти?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

При превышении лимита памяти, установленного для контейнера в Docker, происходят следующие основные события:

  1. OOM (Out of Memory) Event: Ядро операционной системы фиксирует, что процесс внутри контейнера пытается выделить память, превышающую установленный лимит.
  2. Сигнал Killed: Ядро отправляет процессу внутри контейнера сигнал SIGKILL. Этот сигнал не может быть перехвачен или проигнорирован приложением, запущенным в контейнере.
  3. Завершение контейнера: Процесс внутри контейнера принудительно завершается. Docker демон обнаруживает, что главный процесс контейнера завершился, и меняет статус контейнера на Exited.
  4. Код выхода: Контейнер завершается с ненулевым кодом выхода (обычно 137), что указывает на то, что он был принудительно завершен сигналом.

Последствия для приложения и системы:

  • Приложение, запущенное в контейнере, аварийно завершается.
  • Если настроена политика перезапуска (restart policy), Docker попытается перезапустить контейнер.
  • В логах контейнера и/или хоста будет зарегистрировано событие OOM и завершение контейнера.

Пример установки лимита памяти:

# Docker Compose example
services:
  myapp:
    image: myimage
    mem_limit: 512m # Sets a memory limit of 512 MB
# Docker run example
docker run -m 512m myimage # Sets a memory limit of 512 MB