SystemdDoctor
мешает работе сокеты нагрузка

Сокет отклоняет соединения: достигнут MaxConnections

В режиме «экземпляр на соединение» systemd ограничивает число одновременных подключений параметром MaxConnections= (по умолчанию 64). Достигнув предела, сокет перестаёт принимать новые соединения, пока не освободятся прежние.

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

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

  1. Предел одновременных соединений мал

    Значение по умолчанию рассчитано на редкие обращения. Для сколько-нибудь нагруженной службы его мало.

  2. Экземпляры не завершаются

    Если обработчик зависает, экземпляры копятся и занимают предел. Внешне это выглядит как отказ в обслуживании.

  3. Ограничение на источник

    Параметр MaxConnectionsPerSource= ограничивает число соединений с одного адреса. При работе через прокси все соединения приходят с одного адреса и упираются в него.

Диагностика

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

Предел, текущее число соединений и сколько их было принято всего.

systemctl show myapp.socket -p MaxConnections -p NConnections -p NAccepted

Работающие экземпляры обработчика.

systemctl list-units "myapp@*" --no-pager | tail -5

Решение

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

1. Предел одновременных соединений мал
Почему происходит
Значение по умолчанию рассчитано на редкие обращения. Для сколько-нибудь нагруженной службы его мало.
Как проверить
Посмотрите предел и число работающих экземпляров.
systemctl show myapp.socket -p MaxConnections -p NConnections
systemctl list-units "myapp@*" --no-pager | head
Как исправить
Поднимите предел или откажитесь от режима по соединению: обычной сетевой службе он не подходит.
sudo systemctl edit myapp.socket   # [Socket]\nMaxConnections=256
2. Экземпляры не завершаются
Почему происходит
Если обработчик зависает, экземпляры копятся и занимают предел. Внешне это выглядит как отказ в обслуживании.
Как проверить
Посмотрите живущие экземпляры и их время жизни.
systemctl list-units "myapp@*" --no-pager
systemctl show myapp@*.service -p ActiveEnterTimestamp 2>/dev/null | head
Как исправить
Добавьте обработчику ограничение времени работы через RuntimeMaxSec=: зависший экземпляр будет завершён и освободит место.
3. Ограничение на источник
Почему происходит
Параметр MaxConnectionsPerSource= ограничивает число соединений с одного адреса. При работе через прокси все соединения приходят с одного адреса и упираются в него.
Как проверить
Посмотрите оба предела.
systemctl show myapp.socket -p MaxConnections -p MaxConnectionsPerSource
Как исправить
Поднимите предел на источник или уберите его, если перед службой стоит прокси.

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

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

systemd[1]: myapp.socket: Too many incoming connections (64), refusing.
systemd[1]: myapp.socket: Refusing connection from <адрес>.

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

Источники

  • systemd.socket(5)
    MaxConnections=, MaxConnectionsPerSource=, Accept=.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено нагрузкой на сокет с MaxConnections=2.
    собственная проверка, systemd 255
    сверено 15 сентября 2026