SystemdDoctor
служба не работает postgresql нагрузка

PostgreSQL: too many clients already

Сообщение FATAL: sorry, too many clients already означает, что достигнут предел подключений. База при этом работает: она защищает себя от исчерпания памяти, потому что каждое соединение — это отдельный процесс со своими буферами.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Предел подключений мал для числа клиентов

    Значение по умолчанию (100) рассчитано на скромную нагрузку. Несколько серверов приложений с пулами исчерпывают его быстро.

  2. Приложение не закрывает соединения

    Соединения в состоянии простоя копятся до предела. Признак — много записей с состоянием idle и давним временем начала.

  3. Зарезервированные соединения для обслуживания исчерпаны

    Часть подключений резервируется для суперпользователя. Если и они кончились, даже администратор не сможет подключиться.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Сколько соединений и в каких они состояниях.

sudo -u postgres psql -c 'SELECT count(*), state FROM pg_stat_activity GROUP BY state;'

Подтверждение и время отказов.

sudo tail -20 /var/log/postgresql/postgresql-16-main.log | grep -i "too many"

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Предел подключений мал для числа клиентов
Почему происходит
Значение по умолчанию (100) рассчитано на скромную нагрузку. Несколько серверов приложений с пулами исчерпывают его быстро.
Как проверить
Посмотрите предел и текущие подключения.
sudo -u postgres psql -c 'SHOW max_connections;' -c 'SELECT count(*) FROM pg_stat_activity;'
Как исправить
Поднимать предел стоит осторожно: каждое соединение расходует память. Обычно правильнее поставить пул соединений перед базой.
2. Приложение не закрывает соединения
Почему происходит
Соединения в состоянии простоя копятся до предела. Признак — много записей с состоянием idle и давним временем начала.
Как проверить
Посмотрите состояния соединений.
sudo -u postgres psql -c "SELECT state, count(*) FROM pg_stat_activity GROUP BY state;"
Как исправить
Настройте пул в приложении и ограничьте время простоя соединений параметром базы idle_session_timeout.
3. Зарезервированные соединения для обслуживания исчерпаны
Почему происходит
Часть подключений резервируется для суперпользователя. Если и они кончились, даже администратор не сможет подключиться.
Как проверить
Посмотрите резерв и занятые подключения.
sudo -u postgres psql -c 'SHOW superuser_reserved_connections;' 2>/dev/null
Как исправить
Освободите соединения: завершите простаивающие сеансы средствами базы, затем разбирайтесь с источником.

Пример вывода

Предел подключений исчерпан. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

postgres[5100]: FATAL:  sorry, too many clients already
app[1200]: error: connection to server at "127.0.0.1", port 5432 failed: FATAL: sorry, too many clients already

Связанные ошибки

Где встречается чаще всего

Источники

  • Документация PostgreSQL: настройка соединений документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено при max_connections=5 и пуле приложения на 20 соединений.
    собственная проверка, systemd 255
    сверено 15 сентября 2026