Повышенная активность процесса простоя после обновления

Привет,
После обновления Discourse до версии v2.5.0.beta4-399-gbf8085e436 (с версии 2.4.x, используя загрузку через командную строку из репозитория discourse_docker, сразу перед коммитами, связанными с обновлением Postgres до версии 12), на сервере заметно возросла нагрузка на процессор (даже если никто не подключен).

Утилита “top” показывает, что несколько процессов “ruby” довольно часто находятся в активном состоянии. Я понял, что это воркеры unicorn и sidekiq. При запуске redis-cli monitor видно, что они выполняют блокирующие запросы BRPOP с таймаутом 2 секунды, чтобы проверить наличие задач для выполнения. Таким образом, это приводит к десяткам команд Redis в секунду. Кроме того, статистика обновляется каждые 5 секунд. Команда redis-cli info stats показывает, что в среднем обрабатывается 15–20 команд в секунду.

Неизвестно, может ли такая активность привести к наблюдаемому потреблению процессора на уровне 2–4%. В старой версии оно составляло менее 0,5%. Я не проверял статистику redis-cli в то время.

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

Хм, это связано с вашей работой, @eviltrout?

О какой работе вы думаете? Не думаю, что что-то из того, над чем я работал недавно, могло стать причиной этого.

Моя вина, я перепутал с ember-cli

Проверьте forum.example.com/sidekiq — после обновления могут выполняться фоновые задачи повторной обработки.

Высоковероятно, что Redis не был затронут. Я никогда не говорю «никогда», потому что уже обжигался, но подозреваю, что дело в чём-то другом :slight_smile:

Крутая подсказка. Ничего тревожного я там не увидел: никаких запущенных задач, и ни одна не выполнялась долго (лишь несколько превысили 100 мс). На дашборде показано около 1000 обработанных элементов в день, как и до обновления.

Вероятно, это не по теме, но интересно также посмотреть на график «Processed» за последние 6 месяцев: похоже, есть два плато (одно в два раза выше другого), между которыми система переключается с интервалом в недели. Это не коррелирует с перезагрузками (и мы тоже ничего не обновляли в этот период).

Есть ли простой способ изменить таймаут 2 секунды для BRPOP? В коде я его не нашёл. Это хотя бы позволило понять, являются ли циклы опроса задач проблемой.

Вот что я иногда вижу в выводе top:

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                     
   1024 discour+  20   0  333584 202888  21660 S   1.3   2.5   3:35.81 ruby                                                                        
   1156 discour+  20   0  715904 249416  24532 S   1.3   3.1   3:26.50 ruby                                                                        
   1178 discour+  20   0  726664 251468  24564 S   1.3   3.1   3:26.11 ruby                                                                        
   1189 discour+  20   0  714368 247912  24444 S   1.3   3.1   3:24.56 ruby                                                                        
   1200 discour+  20   0  709760 249708  24632 S   1.3   3.1   3:22.96 ruby                                                                        
   1234 discour+  20   0  713344 250288  24636 S   1.3   3.1   3:30.24 ruby                                                                        
   1167 discour+  20   0  712832 247928  24436 S   1.0   3.1   3:24.75 ruby                                                                        
 188658 me        20   0   10424   4240   3576 R   0.7   0.1   0:00.36 top                                                                         
    448 root      20   0 1748444  84900  45884 S   0.3   1.1   6:09.98 dockerd                                                                     

при этом никто не подключён…

Каждый процесс набрал 3,5 минуты процессорного времени за 35 часов работы при минимальной активности пользователей.

Я также пытался использовать rbtrace, но он выдаёт ошибку:
(pid is not listening for messages, did you require “rbtrace”)
Нужно ли мне пересобрать образ, чтобы это исправить? Или можно просто что-то настроить или пересобрать внутри контейнера?