@Egegey

Почему падает база данных и весь Django сервер за ней?

Я заранее извиняюсь за спам тегами, но я не знаю куда копать и что вызывает ошибку.

После запуска docker-compose up поднимается 4 контейнера:
redis - использую только для django-channels
django - запускаю asgi, через uvicorn
postgesql
nginx

К websocket нормально подключается и работает, но спустя какое-то время (примерно 100 минут, три раза так было) уже ничего не работает.

Попытки войти в админку django заканчиваются такой ошибкой (скрин найден в сети, но ошибка точно такая)
could not fork new process for connection: Resource temporarily unavailable django
:
89001373-abe76a80-d317-11ea-8140-5cf35968d962.png

По ssh к серверу не могу подключиться, ошибка:
kex_exchange_identification: Connection closed by remote host


Если в момент появления проблемы находиться в консоли на сервере и что-то вызывать, то такая ошибка:
-bash: fork: retry: Resource temporarily unavailable


Решаю перезагрузкой сервера c панели управления vps.

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

Есть ли у вас какие-то подсказки и намёки где искать причину проблемы? Виновата ли только база данных?
Если так, то какие её настройки мне стоит рассмотреть?
В логах которые приходят в голову тоже ничего не нашёл.
Может ли подключение по вебсокету как-то блокировать базу данных? сейчас довольно часто нужно подключаться/отключаться от сокета.
Хотя я вижу в выводе консоли, что есть и connect, и disconnect.
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
@Egegey Автор вопроса
Запустил docker stats и начал пользоваться апишкой как обычно.
Заметил, что каждое моё подключение по вебсокету увеличивало значение PIDS вышеприведённой команды для контейнера с Django.
В описании команды в документации докера указано, что большое значение этого столбца свидетельствует о том, что внутри контейнера создаются лишние потоки.
Удалил лишние строчки говнокода и теперь всё работает.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
sergey-gornostaev
@sergey-gornostaev Куратор тега PostgreSQL
Седой и строгий
Похоже на исчерпание памяти сервера. Стоит помониторить её использование, найти где утечка и устранить. Да и неплохо бы настроить сервер так, чтобы он такого не позволял.
Ответ написан
Комментировать
karabanov
@karabanov
Системный администратор
docker-compose 2.3 ещё позволял ограничивать ресурсы. Воспользуйся им и выставь лимиты на количество доступной памяти для контейнеров.

Настрой мониторинг (node_exporter, Prometheus, Alertmanager, Grafana) смотри, что происходит с сервером - вот инструкции: 1 CPU 1 Гб – а я хочу мониторинг, как у больших дядей

PS
Если образы собирал на базе Alpine, будь осторожен, там вместо libc суррогат под названием musl который сильно ограничен и может добавлять различные спецэффекты, похожие на описанные тобой.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы