Техническое: «CRITICAL: Out of memory (OOM) killed process 4521 (postgres). Требуется увеличение swap до 4GB.»

Ошибка `CRITICAL: Out of memory (OOM) killed process (postgres)` означает, что ядро Linux активировало механизм OOM Killer — защитный инструмент, который принудительно завершает процессы при критической нехватке оперативной памяти. В данном случае жертвой стал процесс PostgreSQL, что приводит к аварийному завершению работы базы данных и потенциальной потере незафиксированных транзакций.

**Причины возникновения OOM Kill для PostgreSQL:**
1. Недостаточный объём оперативной памяти на сервере для текущей нагрузки.
2. Завышенные параметры `shared_buffers`, `work_mem` или `max_connections` в конфигурации PostgreSQL.
3. Одновременное выполнение множества тяжёлых запросов с сортировкой или хэш-соединениями.
4. Утечки памяти в сторонних расширениях или приложениях.
5. Отсутствие или недостаточный размер swap-раздела.

**Пошаговое увеличение swap до 4GB на Linux:**

bash
# 1. Проверить текущее состояние swap
free -h
swapon —show

# 2. Создать файл подкачки размером 4GB
sudo fallocate -l 4G /swapfile
# Или альтернативный способ:
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096

# 3. Установить правильные права доступа
sudo chmod 600 /swapfile

# 4. Инициализировать swap
sudo mkswap /swapfile

# 5. Активировать swap
sudo swapon /swapfile

# 6. Проверить результат
free -h

# 7. Добавить в /etc/fstab для постоянного монтирования
echo ‘/swapfile none swap sw 0 0’ | sudo tee -a /etc/fstab

**Дополнительные меры по предотвращению OOM Kill:**

— Настройте параметр `vm.swappiness` (рекомендуемое значение для серверов БД — 10):
bash
echo ‘vm.swappiness=10’ | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

— Снизьте `shared_buffers` в `postgresql.conf` до 25% от объёма RAM.
— Установите `work_mem` с осторожностью: значение умножается на количество активных соединений.
— Рассмотрите использование `PgBouncer` для пулинга соединений.
— Настройте мониторинг памяти через `pg_stat_activity` и системные метрики.
— Установите `oom_score_adj` для процесса PostgreSQL, чтобы снизить его приоритет для OOM Killer.

**Важно:** Swap — это временное решение. Если OOM Kill происходит регулярно, необходимо провести аудит конфигурации PostgreSQL, оптимизировать запросы или увеличить объём оперативной памяти сервера.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.