Ошибки 502 при переименовании крупных (по количеству тем) категорий

Привет.
Я также опубликовал это здесь: Moving posts returns 502 bad gateway - #63 by Canapin
но, похоже, ошибка возникает и в других контекстах. Я не могу переименовать категорию:

Консоль JS:

То же самое в безопасном режиме (в любом случае у меня нет пользовательских тем или плагинов, кроме data-explorer), версия 2.6.0.beta2
Мой сервер работает под управлением Ubuntu 18, имеет 4 vCPU, 8 ГБ ОЗУ и 160 ГБ дискового пространства.

3 лайка

Долго ли проявляется ошибка? Мне кажется, вы столкнулись с тайм-аутом из-за тяжелого запроса.

1 лайк

20–30 секунд, возможно? Кроме того, это не происходит при переименовании других категорий. :thinking:

edit: также происходит на моём форуме для разработки (довольно мощный компьютер с подсистемой Ubuntu).

re-edit:

  1. Разделение на более мелкие партии, похоже, работает. Значит, Discourse не любит перемещать более 3000 тем, даже на более мощном сервере (я увеличил конфигурацию до 16 vCPU / 32 ГБ). Так что, думаю, эта проблема отличается от переименования моих категорий. Я всё ещё не могу переименовать категорию.

  2. Я создал новую категорию B (которую могу переименовывать по желанию), переместил все темы из категории A (которую не могу переименовать) в категорию B: после этого я больше не могу переименовать категорию B, но могу переименовать категорию A.
    Я пробовал переименовывать свои категории, каждый раз выбирая категорию с большим количеством постов. Категория с большим количеством контента (больше постов, более длинные темы), похоже, требует больше времени для переименования.

Есть 2 категории, которые я не могу переименовать (действительно кажется, что это занимает слишком много времени…):

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

30 секунд — это тайм-аут nginx, так что это логично. Ему просто нужно больше времени, чем это.
Если бы я был на вашем месте, я бы попробовал это из консоли Rails.

Я думал сделать это так, но не был уверен, что это безопасно: интересно, почему переименование заголовка категории в Discourse занимает так много времени :thinking:
Неужели там нужно проверять что-то, о чём я даже не задумываюсь?

Похоже, что да :slight_smile:
Думаю, оно может пересчитывать некоторые статистические данные. Вы можете подключиться к Postgres и выполнить что-то вроде:

SELECT pid, age(query_start, clock_timestamp()), usename, query 
FROM pg_stat_activity 
WHERE query != '<IDLE>' AND query NOT ILIKE '%pg_stat_activity%' 
ORDER BY query_start desc;

чтобы увидеть, что именно занимает так много времени.

Спасибо!
Однако я не знаком с этим. Стоит ли мне запускать этот запрос, пока Discourse пытается изменить название категории?

Да, он покажет вам текущие выполняемые запросы, поэтому стоит запустить его в ожидании. У вас есть 30 секунд :wink:

2 лайка

Я запустил запрос примерно через 10 секунд после попытки изменить название категории, и вот что он вернул:

Ничего странного не вижу? :thinking:

Я вижу очень тривиальный запрос (UPDATE categories...), который, похоже, уже выполняется 13 секунд…
Что произойдет, если запустить его вручную?

РЕДАКТИРОВАНИЕ: Если это импортированный форум, может помочь создание резервной копии и последующее восстановление.

Поскольку у меня возникла та же проблема на моей установке для разработки на домашнем компьютере, я попробовал на своём форуме для разработчиков.

Я попытался изменить название категории через интерфейс Discourse. Ошибка, показанная в моём первом сообщении, возникла, и моя оперативная память была полностью заполнена:
image

Ваш запрос показывает:

Я попробовал обновить данные через консоль Rails.
Использовал эти две команды:

ActiveRecord::Base.connection.execute("UPDATE categories SET name = 'General Discussion', topic_template = '', sort_order = '', default_view = '', read_only_banner = '', name_lower = 'general_discussion', updated_at = '2020-09-16 13:36:50.014192' WHERE categories.id = 21")
Category.where(id: 21).update(name: "General")

Обе команды сработали идеально.

Это… интересно… :thinking:

Обновление: Я попытался переименовать категорию на другом, действующем форуме (другие данные/сервер/ОС и т. д., но версия Discourse та же).

Изменение названия категории занимает много времени (~10 секунд). Я пробовал несколько раз и также один раз столкнулся с ошибкой 502.

Мне кажется, это проблема в самом Discourse, возможно, связанная с недавним обновлением? :thinking:
Оба форума используют версию 2.6.0.beta2.

Не мог бы кто-нибудь попробовать изменить название категории (категории с тысячами или десятками тысяч тем) на своём форуме с той же версией Discourse, чтобы проверить, будет ли это медленно или возникнет ошибка 502?

2 лайка

Работала ли переименование категорий с большим количеством тем быстро для вас в предыдущей версии Discourse?

Я не помню, чтобы на моём предыдущем форуме (который тоже был импортирован) возникала ошибка 502, но я не переименовывал категорию с момента импорта три года назад. Не помню, было ли переименование категории медленным. Что касается моего нового, более крупного форума, он был импортирован на той версии Discourse, о которой я упоминаю, поэтому я не могу сравнить его с более старой версией.

1 лайк

Только небольшое уточнение: я думаю, что ранее я выполнял Category.where(id: 21).update(name: "General") для категории, из которой я переместил темы или что-то в этом роде, потому что сейчас мне пришлось использовать эту команду несколько раз для различных категорий, и оказывается, что время выполнения команды пропорционально количеству постов в целевой категории.
Так что, по сути, это та же проблема, что и при обновлении категории через интерфейс, за исключением того, что в командной строке не происходит тайм-аута.

Для категории с более чем 30 000 тем это заняло, возможно, более минуты, для категории с более чем 15 000 тем — более 30 секунд, а для категорий с небольшим количеством тем всё прошло быстро.

1 лайк

Наш форум в последние 6 месяцев стал всё чаще выдавать ошибки. Я только что удвоил ресурсы сервера (16 процессоров, 64 ГБ ОЗУ), и хотя он работает значительно лучше, я обнаружил воспроизводимую ошибку.

Попытка переименовать одну категорию каждый раз приводит к ошибке 502.

2 лайка

Вы соответствующим образом настроили параметры в app.yml?

Вам стоит посмотреть логи, чтобы понять, есть ли какая-то подсказка. Есть ли что-то особенное в этой категории? Возможно, у вас повреждён индекс базы данных?

2 лайка

Да!

Это просто просмотр по адресу forumwebsite.com/logs? Я не вижу ошибок, которые конкретно связаны с действием переименования категории.

Я вижу много записей в разделе «Инфо», но снова ничего конкретного, касающегося этого действия.

Мне стоит пытаться устранить любые ошибки?

2 лайка

Вы можете посмотреть /admin/logs (или что-то в этом роде) в веб-интерфейсе, а также выполнить команду вроде

tail -f /var/discourse/shared/standalone/logs/rails/production.log

Это по памяти и набрано вручную, поэтому рекомендую использовать автодополнение через клавишу Tab. :slight_smile:

4 лайка