Мы запускаем несколько сайтов Discourse с поддержкой мультисайтовости в рамках одного приложения. Недавно мы выполнили пакетный импорт большого количества пользователей (сотни тысяч пользователей на 6 сайтах). После импорта Sidekiq обрабатывает фоновые задачи очень медленно. Панель управления Sidekiq показывает огромный backlog, и задачи очищаются гораздо медленнее, чем ожидалось.
Детали окружения:
- Виртуальная машина была обновлена до 16 ядер CPU / 16 ГБ RAM.
- Однако в интерфейсе Sidekiq мы видим только 5 потоков, и кажется, что используется лишь небольшая часть доступных ресурсов.
- Основная очередь импорта («nursingjobs» как родитель мультисайта) обрабатывает задачи для всех дочерних сайтов, но пропускная способность задач очень низкая.
- Метрики сервера: загрузка CPU иногда достигает 80–90%, использование памяти — около 6,7/7,2 ГБ.
Наша цель:
- Ускорить обработку Sidekiq/фоновых задач для быстрого устранения больших backlog после импорта.
- Обеспечить, чтобы Discourse использовал все доступные ресурсы (CPU/RAM).
- Понять, есть ли ограничения на количество потоков или процессов, которые нужно скорректировать.
Вопросы:
- Как лучше всего настроить Sidekiq/Discourse для высокой пропускной способности после импорта?
- Какие рекомендуемые настройки для UNICORN_SIDEKIQS и DISCOURSE_SIDEKIQ_WORKERS на системах с большим количеством ядер?
- Есть ли настройки Postgres или другие параметры app.yml, которые стоит изменить, чтобы избежать ошибок пула БД при увеличении параллелизма Sidekiq?
- Какие существуют лучшие практики для быстрого и безопасного устранения огромных backlog Sidekiq после импорта?
Статистика Sidekiq/скриншоты доступны, если это потребуется!
