PG::ConnectionBad приводит к временному сбою сайта

В логах ошибок я периодически получаю следующие сообщения. Из-за этого сайт становится недоступным на 15–30 секунд, пока не восстановится.

Сообщение об ошибке (Info):

PG::ConnectionBad (FATAL: система базы данных находится в режиме восстановления) /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/pg-1.2.3/lib/pg.rb:58:in `initialize’

Сообщение об ошибке (Env):


Одна очень странная вещь, которую я заметил, изучая эти логи: похоже, система ищет папку по пути /var/www/…, но такой папки на сервере не существует. Должна ли она там быть? Любая помощь будет оценена.

Если база данных повреждена, то сайт неизбежно неработоспособен. Вам нужно выяснить причину. Наиболее частые причины — нехватка оперативной памяти (RAM) и места на диске. Я предполагаю, что проблема в RAM. Сколько у вас оперативной памяти? Что выводит команда free -h?

Это путь внутри контейнера. Если вы выполните ./launcher enter app, то увидите её там.

Я думаю, вы правы. Вот вывод команды free -h.

image

Мне кажется, 131 МБ свободного места — это не так уж много.

Что ж, у вас доступно 646 МБ, и 4 ГБ — это достаточно, чтобы не рекомендовать использование файла подкачки. Каков размер вашей базы данных? Какой у вас трафик? Запущено ли на сервере что-то ещё, кроме Discourse?

На сервере запущено только Discourse.

Чтобы узнать размер, я выполнил:

./launcher enter app
rails db
SELECT pg_size_pretty(pg_database_size(current_database()));

В результате был получен вывод: 4650 МБ (1 строка).

Что касается трафика:
Вчера было 1200 просмотров страниц, за последнюю неделю — 12 400. Примерно 160 пользователей за последнюю неделю и около 80 одновременных пользователей в любой момент времени.

Если у вас есть свободное место на диске, добавьте файл подкачки, чтобы получить немного временного запаса.

Я добавил гигабайт подкачки. Посмотрим, что будет во время высокой нагрузки сегодня вечером.

image

Вы просто супер. Сводный файл на 1 ГБ, похоже, полностью решил проблему с вылетами. Честно говоря, я рад, что проблема была в оперативной памяти, а не в базе данных. В эти выходные я увеличу объем оперативной памяти на сервере. Огромное спасибо всем, кто помогал в этой теме!

После этого перезапустите discourse-setup, чтобы сбросить параметры памяти.

Мне интересно, были ли они изначально правильно настроены. :man_shrugging:t2:

Честно говоря, не уверен. До этого мы делали полную переустановку и перезагрузку сервера после изменения оборудования некоторое время назад. Я предполагаю, что после перезагрузки любые изменения в системе должны были быть замечены Discourse.

После установки файла подкачки в некоторые моменты использовалось более 4 ГБ «памяти», поэтому, похоже, это точно было проблемой в периоды наибольшей нагрузки, что совпадает с временными промежутками, когда сервер падал. Сегодня мы обновились, и сайт теперь работает очень хорошо.

Но это не так. Существуют настройки, которые контролируют, например, сколько оперативной памяти может использовать база данных, и они встроены в app.yml. Вы можете отредактировать их вручную или снова запустить discourse-setup.

Я снова запустил функцию discourse-setup сегодня, так как раньше не знал об этом. Для меня это было ново.