🧠 Уровень: Senior DevOps / SRE
🎯 Цель: Найти причину деградации хост-системы при работе контейнера, не убивая продакшен
📍 Ситуация:
Ты запускаешь относительно простой контейнер:
docker run --rm myapp:latest
Через несколько минут:
- Уровень load average на хосте резко подскакивает
- CPU не перегружен, но система начинает "подвисать"
- Контейнер *не* использует много CPU или памяти (по `docker stats`)
- top и iotop на хосте — ничего подозрительного
- Но хост "лагает", SSH подключается с задержками, htop еле прокручивается
📦 Контейнер собран из Dockerfile:
FROM ubuntu:22.04
COPY . /app
WORKDIR /app
CMD ["python3", "main.py"]
🧩 Ваша задача:
1. Объяснить, как контейнер может вызывать *нагрузку на хост*, не показывая это в docker stats
2. Найти потенциальную причину такой деградации
3. Предложить способ отладки, не убивая контейнер
4. Предложить защиту от подобных сценариев на уровне docker run и docker-compose
5. Написать Dockerfile и docker run с ограничениями, чтобы контейнер больше так не вел себя
💡 Подсказка:
Некоторые контейнеры могут порождать *огромное количество процессов* или использовать слишком много I/O операций с tmpfs или сокетами, перегружая не CPU, а системные лимиты ядра.
🛠 Решение:
1. Проверяем количество процессов:
ps -eLf | wc -l
2. Выясняем, что контейнер запускает тысячи потоков (например,
while True: os.fork() или Thread() без лимита в main.py)3. Используем
strace`/`nsenter для анализа PID пространства:
docker inspect <container_id> | grep Pid
nsenter -t <pid> -a htop
4. Ставим лимиты:
- Через
--pids-limit:
docker run --pids-limit 100 --memory=256m --cpus="0.5" myapp:latest
- Или в
docker-compose.yml:
deploy:
resources:
limits:
cpus: "0.5"
memory: 256M
5. Добавляем в
Dockerfile:
ENV PYTHONUNBUFFERED=1
📌 Вывод:
Контейнеры могут перегружать хост не по CPU/Memory, а по количеству потоков, сокетов, inode или I/O. Это не видно в
docker stats, но критично для стабильности. Решение — выставлять ограничения (ulimit, pids, memory) и проверять, что внутри контейнера не бесконечный форк/спам.💬 Отличный сценарий для продвинутого собеса на DevOps / Platform-инженера.