Что такое OOMKilled?
Ошибка OOMKilled (Out of Memory)
возникает, когда контейнер превышает лимит памяти и система завершает процесс.
Причины возникновения
- Недостаточный лимит памяти
- Утечки памяти в приложении
- Неправильная настройка ресурсов
- Высокая нагрузка на приложение
- Проблемы с garbage collection
- Недостаточно памяти на узле
Как отладить ошибку
- Проверь использование памяти -
kubectl top pod
- Проверь логи пода -
kubectl logs pod-name
- Проверь события -
kubectl describe pod pod-name
- Проверь ресурсы узла -
kubectl top node
- Проверь метрики - используй Prometheus/Grafana
Как исправить ошибку
1. Увеличь лимиты памяти
2. Оптимизируй приложение
3. Настрой garbage collection
4. Используй горизонтальное масштабирование
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: my-app
5spec:
6 replicas: 3
7 selector:
8 matchLabels:
9 app: my-app
10 template:
11 metadata:
12 labels:
13 app: my-app
14 spec:
15 containers:
16 - name: app
17 image: nginx:latest
18 resources:
19 requests:
20 memory: "128Mi"
21 limits:
22 memory: "256Mi"
5. Настрой мониторинг памяти
6. Используй вертикальное масштабирование
Как мониторить подобные ошибки
- Настрой алерты на высокое использование памяти
- Мониторь метрики памяти в реальном времени
- Используй Prometheus и Grafana
- Настрой логирование использования памяти
FAQ
В: Как определить оптимальные лимиты памяти?
О: Мониторь использование памяти в течение времени, добавь 20-30% буфер.
В: Что делать с утечками памяти?
О: Используй профилирование памяти, оптимизируй код, настрой garbage collection.
В: Как избежать OOMKilled в production?
О: Настрой правильные лимиты, используй мониторинг, оптимизируй приложение.
Лучшие практики
- Устанавливай разумные лимиты ресурсов
- Мониторь использование памяти
- Оптимизируй код приложения
- Используй горизонтальное масштабирование
- Настрой алерты на критические значения