Erreur 502 / Timeout Unicorn sur la page Rewind pour les utilisateurs très actifs

Bonjour :waving_hand:

Nous rencontrons un problème avec le plugin Discourse Rewind. Pour certains de nos utilisateurs les plus actifs, la page Rewind ne se charge pas et renvoie une erreur 502.

  • Le problème semble être un délai d’attente (timeout) pendant le processus d’agrégation des données.
  • Cela se produit systématiquement pour les utilisateurs ayant un niveau d’activité élevé, alors que cela fonctionne bien pour les utilisateurs moyens.
  • Les journaux indiquent que l’ouvrier Unicorn reçoit un signal USR2 car il dépasse la limite de délai d’attente lors de l’exécution d’une requête de base de données.

Erreur dans la console :

Avertissement dans les journaux :

Message

Unicorn worker received USR2 signal indicating it is about to timeout, dumping backtrace for main thread
config/unicorn.conf.rb:204:in `backtrace'
config/unicorn.conf.rb:204:in `block (2 levels) in reload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-mini-profiler-4.0.1/lib/patches/db/pg/alias_method.rb:112:in `exec'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-mini-profiler-4.0.1/lib/patches/db/pg/alias_method.rb:112:in `async_exec'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/connection_adapters/postgresql/database_statements.rb:167:in `perform_query'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/connection_adapters/abstract/database_statements.rb:556:in `block (2 levels) in raw_execute'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/connection_adapters/abstract_adapter.rb:1017:in `block in with_raw_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-8.0.4/lib/active_support/concurrency/null_lock.rb:9:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/connection_adapters/abstract_adapter.rb:986:in `with_raw_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/connection_adapters/abstract/database_statements.rb:555:in `block in raw_execute'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-8.0.4/lib/active_support/notifications/instrumenter.rb:58:in `instrument'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/connection_adapters/abstract_adapter.rb:1137:in `log'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/connection_adapters/abstract/database_statements.rb:554:in `raw_execute'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/connection_adapters/abstract/database_statements.rb:591:in `...

Backtrace

/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-8.0.4/lib/active_support/broadcast_logger.rb:218:in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-8.0.4/lib/active_support/broadcast_logger.rb:217:in `map'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-8.0.4/lib/active_support/broadcast_logger.rb:217:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-8.0.4/lib/active_support/broadcast_logger.rb:129:in `warn'
/var/www/discourse/lib/signal_trap_logger.rb:40:in `public_send'
/var/www/discourse/lib/signal_trap_logger.rb:40:in `block (2 levels) in ensure_logging_thread_running'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
3 « J'aime »

Merci @Don, de quelle échelle parlons-nous, pouvez-vous nous donner une idée de l’activité de cet utilisateur ? (publications par an / mentions “j’aime” par an)

2 « J'aime »

Bien sûr, voici quelques statistiques pour deux des utilisateurs concernés :

Utilisateur 1

  • Publications créées : 11 709
  • Réactions données : 41 569
  • Réactions reçues : 74 603

Utilisateur 2

  • Publications créées : 5 959
  • Réactions données : 37 974
  • Réactions reçues : 38 875

Les deux utilisateurs déclenchent l’erreur 502, ce qui suggère que le seuil de temps d’attente est atteint même avec l’activité modérément plus faible (mais toujours élevée) de l’Utilisateur 2.

1 « J'aime »

Merci beaucoup Don, quelqu’un va y jeter un œil au cours des deux prochaines semaines.

1 « J'aime »

Je pense que cette correction devrait aider :

3 « J'aime »