Сетевое соединение Redis работает крайне медленно

Я постоянно вижу это в логах — значения варьируются от ~100 тыс. до ~1,35 млн, но показания около 100 тыс. встречаются довольно часто:

Ваше сетевое соединение Redis работает крайне плохо. Последние значения RTT: [97069, 103986, 98459, 100762, 381617]; в идеале они должны быть < 1000. Убедитесь, что Redis работает в той же зоне доступности (AZ) или дата-центре, что и Sidekiq. Если эти значения близки к 100 000, это может означать, что процесс Sidekiq исчерпал ресурсы процессора; уменьшите уровень параллелизма и/или обратитесь к https://github.com/mperham/sidekiq/discussions/5039

Это может указывать на то, что Redis не может использовать достаточное количество ресурсов процессора? Однако на самом сервере для процессора и оперативной памяти, похоже, есть значительный запас.

Также:
Sidekiq потребляет слишком много памяти (используется: 3570.19M) для 'www.example.com', выполняется перезапуск

Используется единый файл app.yml с версией Discourse stable 3.3.2.

Из app.yml:

UNICORN_SIDEKIQS: 9
DISCOURSE_SIDEKIQ_WORKERS: 5

Я также добавил эту конфигурацию на хост:

Информация из панели управления Sidekiq:


Кажется, что Redis не может превысить использование памяти в 1024 МБ.

Если у кого-то есть идеи, буду признателен! :meow_heart:

В дополнение к этому у меня возникла та же проблема с Jobs::PostAlert:

При текущих тестах время выполнения этих задач часто достигает 15 минут при использовании 4 процессов Sidekiq с 5 потоками каждый (по умолчанию). Похоже, скорость обработки задач в секунду для Sidekiq в основном зависит от того, сколько таких задач выполняется одновременно, и от количества свободных потоков для других задач.

Увеличение количества процессов Sidekiq до 6 и более (с 5 потоками) ускоряет очистку очереди, но PostgreSQL довольно регулярно падает (я предполагаю, из-за одновременного выполнения слишком большого количества задач Jobs::PostAlert).

Это происходит в версии Stable 3.3.2. Изменения и исправления из связанной темы, по-видимому, уже внедрены в 3.3.2, если я не ошибаюсь.

Postgres никогда не должен падать, и это обычно указывает на ошибку в Postgres или какую-то более крупную проблему.

Есть ли у вас логи?

Перезагружали ли вы сервер после внесения изменений в конфигурацию ядра?

Возможно, также будет полезно выполнить

lscpu

Никогда не устанавливайте UNICORN_SIDEKIQS на такое высокое значение, увеличивая только количество воркеров, но

Такого никогда не должно происходить.

Возможные причины:

  1. Ограничение ресурсов, потому что либо
    a) Ваш сайт вырос больше, чем позволяют ресурсы сервера
    b) Вы неправильно распределяете ресурсы
  2. Где-то в стеке есть ошибка

Я бы начал с настройки:

UNICORN_SIDEKIQS: 1
DISCOURSE_SIDEKIQ_WORKERS: 20

что должно освободить часть оперативной памяти на вашем сервере.

Для получения дополнительной информации вам нужно будет запустить проблемные задачи в консоли PostgreSQL и сообщить, в чём заключается узкое место.

Приношу извинения за исчезновение и благодарю за ответы. :slight_smile:

Я считаю, что основной причиной медленной работы Redis было то, что THP всё ещё был включён (хотя я думал иначе):

Для решения проблемы с падением PostgreSQL главным решением для меня стало добавление этого в app.yml:

docker_args:
  - "--shm-size=34g"

Значение установлено как db_shared_buffers + 2 ГБ, где db_shared_buffers составляет 25% от общей оперативной памяти хост-машины.

Переопределение значения по умолчанию 512 МБ:

Я просмотрел вашу историю сообщений и увидел в теме Очень медленный Sidekiq … огромное количество непрочитанных уведомлений пользователей, что вы используете сервер с 32 ядрами и 128 ГБ ОЗУ и имеете очень большую и активную базу пользователей. В таком контексте я понимаю, почему 34 ГБ — не такая уж большая цифра! Однако для контекста может быть полезно (и интересно) узнать масштаб вашей установки — возможно, здесь или даже в вашем профиле? (например, количество ежедневных и ежемесячных активных пользователей, размер резервных копий базы данных, конфигурация сервера: ОЗУ, swap, диск, процессоры). Может быть, даже создать тему, где мы просто будем делиться своей статистикой — как для больших, так и для малых установок.