Из-за экстремальной нагрузки это временно отображается для всех... хотя на самом деле это не так

Привет,

Это сообщение стало появляться почти постоянно с тех пор, как я обновил Discourse пару дней назад.

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

Проверка используемых/доступных ресурсов на хосте не показывает перегрузки системы или чего-либо подобного.

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

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

Сколько у вас unicorn_workers?

Если на хосте ничего другого не запущено, вы выделили 16 процессов (по два на ядро)?

Если вы используете локальный Postgres, каково значение db_shared_buffers?

Я оставил настройки по умолчанию из начальной настройки ./launcher, и это было 8 воркеров.
То же самое для db_shared_buffers: 4096 МБ.

Однако из-за некоторых тестов, подробности которых можно прочитать здесь, количество воркеров было уменьшено до 4. Это не дало эффекта, поэтому я могу как минимум вернуть их к 8.

Причина, по которой это не 2× количество ядер, в том, что это виртуальная машина, и там используются виртуальные процессоры (vCPU), а не реальные ядра.

Я буду мониторить этот экземпляр некоторое время и вернусь, чтобы назначить решение, если это окажется так. Спасибо, @Stephen.

Сообщение относится к ресурсам, которые вы выделяете для Discourse, а не к ресурсам виртуальной машины (ВМ) или хоста.

Установите db_shared_buffers на уровне 25% от зарезервированной памяти и по 2 воркера unicorn на каждый процессор. Возможно, потребуется некоторая тонкая настройка.

Очевидно, что вам также необходимо управлять ресурсами за пределами ВМ, если вы считаете, что пул ресурсов ненадежен. Почти все, кто запускает Discourse, делают это на каком-либо виде VPS.

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

Я восстановил количество воркеров до состояния, которое было до тестирования, и ещё раз проверю ситуацию.

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

Я запомню вашу рекомендацию: 2x количество ядер для воркеров и 25% зарезервированной памяти для общих буферов БД.

Когда вы говорите о «зарезервированной памяти», вы имеете в виду память, зарезервированную для работающего контейнера? Потому что, похоже, она всегда устанавливается просто «на столько, сколько доступно на хосте» :eyes:

Вот что делает discourse-setup:

# db_shared_buffers: 128 МБ для 1 ГБ, 256 МБ для 2 ГБ или 256 МБ * ГБ, максимум 4096 МБ
# UNICORN_WORKERS: 2 * ГБ для 2 ГБ или меньше, или 2 * CPU, максимум 8

Значение «максимум» можно воспринимать с долей скепсиса: особенно крупные сообщества получают выгоду от превышения этих показателей.

Так что да, в вашем случае должны были быть указаны максимальные значения: 8 воркеров и 4096 МБ. Если вы уменьшите количество воркеров и размер общих буферов, доступных для Discourse, система достигнет предела раньше, чем будут использованы все ресурсы виртуальной машины.

Этот пост от @mpalmer по-прежнему является хорошим руководством:

Мне кажется, что оно срабатывает, когда запросы слишком долго находятся в очереди — другими словами, когда входящие запросы обрабатываются медленнее, чем поступают. Можно задаться вопросом, почему так много запросов или почему обслуживание такое медленное. На уровне Discourse есть настраиваемые параметры, которые уже обсуждаются в этой теме, а также, например, в ошибке экстремальной нагрузки.

На уровне Linux я бы проверил:

uptime
free
vmstat 5 5
ps auxrc

Просто обновляю: увеличение количества воркеров решило проблему

Быстрое уточнение.

С тех пор всё казалось в порядке, но уже несколько дней форум иногда ощущается «медленным». Под «медленным» я имею в виду, что запросы (отправка ответов, редактирование и т. д.) обрабатываются с задержкой, и только что я снова заметил то же самое сообщение.

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

Быстрая команда docker stats показала следующее:

CONTAINER ID   NAME                      CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
2c81f3b51e74   app                       800.14%   18.18GiB / 29.38GiB   61.87%    57.1GB / 180GB    31.1TB / 7.45TB   282
5164921ee233   grafana                   0.05%     98.36MiB / 29.38GiB   0.33%     2.05GB / 284MB    7.26GB / 6.17GB   17
400e496902d7   prometheus                0.67%     139.1MiB / 29.38GiB   0.46%     101GB / 3.82GB    28GB / 27.6GB     14
e2af5bfa922f   blackbox_exporter         0.00%     13.71MiB / 29.38GiB   0.05%     169MB / 359MB     295MB / 27.4MB    14
581664b0fe9a   docker_state_exporter     8.59%     11.86MiB / 29.38GiB   0.04%     533MB / 8.67GB    65.2MB / 6.16MB   15
408e050e9dc9   discourse_forward_proxy   0.00%     5.926MiB / 29.38GiB   0.02%     40.1GB / 40.1GB   36.8MB / 9.68MB   9
fbba6c927dd8   cadvisor                  9.13%     385.5MiB / 29.38GiB   1.28%     2.25GB / 135GB    85.1GB / 2.65GB   26
8fe73c0019b1   node_exporter             0.00%     10.74MiB / 29.38GiB   0.04%     112MB / 1.84GB    199MB / 2.82MB    8
9b95fa3156bb   matomo_cron               0.00%     4.977MiB / 29.38GiB   0.02%     81.4kB / 0B       49.4GB / 0B       3
553a3e7389eb   matomo_web                0.00%     8.082MiB / 29.38GiB   0.03%     2.15GB / 6.36GB   215MB / 2.36GB    9
adf21bdea1e5   matomo_app                0.01%     78.13MiB / 29.38GiB   0.26%     8.63GB / 3.74GB   59.8GB / 3.07GB   4
96d873027990   matomo_db                 0.06%     36.8MiB / 29.38GiB    0.12%     3.11GB / 5.76GB   4.16GB / 8.35GB   13

Есть ли идеи, что может быть причиной этого?

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

Есть ли способ увидеть, какой процесс потребляет больше всего ресурсов? Я пытался проверить панель управления Sidekiq, но там показывается только список запущенных процессов/очереди и среднее время выполнения. Некоторые процессы медленные (например, занимают минуты), но сейчас я не вижу ничего в обработке или с ошибками.

Я обновляю всё, чтобы исключить возможные проблемы, возникшие из-за сбоя в версии beta5. Сейчас у меня версия 3.1.0.beta6 - 6892324767.

Тем не менее, загрузка процессора аномально высока. Обычно она колеблется вокруг 60%.

и, вероятно,

ps auxf

В моем обновлении произошла ошибка

api_key = "a quick brown fox"
fetch("https://api.example.com/data", headers: { 'Authorization' => api_key })

Пожалуйста, помогите мне это исправить.

Перезагрузил и VPS, на всякий случай, вдруг что-то странное происходило (хотя сомневаюсь, так как проблема началась внезапно вчера после 150 дней работы), но нет, поведение то же.

Какой-то процесс unicorn потребляет все ресурсы CPU. Есть ли способ получить больше информации о том, что эти unicorn’ы делают там на заднем плане?

Для быстрого взгляда, конечно, он колеблется, но это среднее значение для работающих единорогов, что кажется мне аномальным, учитывая, что это продолжается со вчерашнего дня:

Средняя загрузка (load average) выше 8 на машине с 8 vCPU означает, что ваш сервер перегружен.

Между 8 воркерами Unicorn, множеством процессов PostgreSQL и остальными службами на сервере он не успевает обрабатывать входящие запросы достаточно быстро. По крайней мере, у вас достаточно памяти :sweat_smile:

Это довольно необычно для Discourse, чтобы узким местом становился процессор Unicorn. В большинстве случаев, когда я сталкивался с такой проблемой, виновником был некорректно работающий плагин. Можете ли вы поделиться своим app.yml?

Также, пожалуйста, поделитесь результатами MiniProfiler при загрузке вашей главной страницы и страницы темы.

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

Я жду, когда техническая поддержка вернётся с результатами.

Похоже, на этом скриншоте обрезаны заголовки столбцов, но если один из первых трёх — среднее значение, то вы точно нашли проблему.

season 2 neighbor GIF

Спасибо за вывод. Для справки: первая строка статистики из vmstat не так полезна — все пять строк дают необходимую картину.

Извините, я забыл обновить информацию здесь.

В итоге всё оказалось так, как я и предполагал. На хосте был развёрнут ещё один VPS, который истощал ресурсы.
Мы были перенесены на другой хост менее чем через 24 часа после создания тикета.

Браво, Contabo :+1:

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