С недавнего времени стала происходить странная вещь:
В определенный момент времени (почему - не смогли понять, подозреваем - при повышении нагрузки на сервис, которая зависит от времени суток, дня недели) postgresql внезапно перестает отвечать на запросы, загрузка процессора (gunicorn-процессов) падает с 40% до 0. При этом стоит сделать какое-нибудь ручное соединение к базе (psql, pg_dump) и работа восстанавливается до следующего падения.
Первым действием была перезагрузка сервера - помогала не всегда, и перезагрузка вместо 5 секунд (ssd) длилась по 5-10 минут... После перезагрузки psycopg (аналогично куча сообщений в логах postgresql) начинал заявлять " 2015-09-22 03:47:01 EDT FATAL: the database system is starting up". И на этом все, ничего не работало.
Данные:
ОС: Ubuntu 14.04 x64
PostgreSQL: psql (PostgreSQL) 9.3.8
Сервер: nginx 1.4.6
Бэкенд: django через psycopg2, gunicorn, supervisor
Все запросы начинают возвращать 502 Bad request.
Заранее спасибо за помощь.
Включите подробное
Включите подробное логгирование и читайте логи.
502-я ошибка - это ошибка веб, а не PostgreSQL.
Тут есть несколько вариантов.
1. Проблема на стыке веб-фреймфорка и PostgreSQL, например исчерпание лимита подключений.
2. Проблема с самим PostgreSQL, хотя вы говорите, что подключения непосредственно к базе вручную работают.
Проверьте активность сервера во время "затыка" - возможно какие-то запросы блокируют таблицы, возможно кончается память и т.д.
Если веб-подключение висит, то сделайте strace на соответвующий процесс python'а и посмотрите, чем он занят
Спасибо, попробую
Спасибо, попробую помониторить, выставил log level info
Первое, что сделать:
Первое, что сделать: поставить PgBouncer
Уже был case, грешил на то
Уже был case, грешил на то что приложение имеет низкую производительность в силу большого числа подключений. Пытался ставить и pgpool2 (работал, но почему-то абсолютно не повлиял на производительность) и pgbouncer (производительность выросла. Но после часа работы вообще все упало, перестал принимать connection-ы. После этого я выключил и то и то
Возможно, что-то недонастроил, но на тот момент решили, что есть более срочные задачи