Crash de Discourse dû à un problème de connexion PSQL

Nous recevions continuellement ce message sur notre forum. (toutes les 3-4 heures). Nous avons 16 cœurs de CPU et 32 Go de RAM. Je ne pense pas que les ressources soient un problème.

Oops
Le logiciel qui alimente ce forum de discussion a rencontré un problème inattendu. Nous nous excusons pour le désagrément.

Des informations détaillées sur l'erreur ont été enregistrées et une notification automatique a été générée. Nous allons examiner cela.

Aucune autre action n'est nécessaire. Cependant, si la condition d'erreur persiste, vous pouvez fournir des détails supplémentaires, y compris les étapes pour reproduire l'erreur, en publiant un sujet de discussion dans la catégorie des commentaires du site.

Le journal de production indique


app/models/user_auth_token.rb:125:in `lookup'
lib/auth/default_current_user_provider.rb:131:in `current_user'
lib/current_user.rb:35:in `current_user'
app/controllers/application_controller.rb:1047:in `rate_limit_crawlers'
lib/middleware/omniauth_bypass_middleware.rb:64:in `call'
lib/middleware/csp_script_nonce_injector.rb:12:in `call'
lib/middleware/anonymous_cache.rb:393:in `call'
lib/middleware/csp_script_nonce_injector.rb:12:in `call'
config/initializers/008-rack-cors.rb:14:in `call'
config/initializers/100-silence_logger.rb:27:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:236:in `call'
Erreur inattendue dans Message Bus : ActiveRecord::ConnectionNotEstablished : la connexion au serveur à l'adresse "172.17.0.2", port 5432 a échoué : FATAL : les emplacements de connexion restants sont réservés aux connexions superutilisateur non répliquées

Erreur inattendue dans Message Bus : ActiveRecord::ConnectionNotEstablished : la connexion au serveur à l'adresse "172.17.0.2", port 5432 a échoué : FATAL : les emplacements de connexion restants sont réservés aux connexions superutilisateur non répliquées

Erreur inattendue dans Message Bus : ActiveRecord::ConnectionNotEstablished : la connexion au serveur à l'adresse "172.17.0.2", port 5432 a échoué : FATAL : les emplacements de connexion restants sont réservés aux connexions superutilisateur non répliquées

Erreur inattendue dans Message Bus : ActiveRecord::ConnectionNotEstablished : la connexion au serveur à l'adresse "172.17.0.2", port 5432 a échoué : FATAL : les emplacements de connexion restants sont réservés aux connexions superutilisateur non répliquées

Nous avons configuré ce qui suit dans

UNICORN_WORKERS: 32
UNICORN_SIDEKIQS: 2

et pour psql

db_shared_buffers: "4096MB"

Veuillez me faire savoir ce que je peux faire d’autre pour améliorer la configuration et m’assurer que le serveur ne plante pas.

Je donnerais à postgres (db_shared_buffers) au moins 16 Go, sinon 20 Go.

Mais vous devez établir plus de connexions à la base de données. Je ne me souviens plus comment faire.

Je pense que c’est max_connections dans /etc/postgresql/postgresql.conf (à l’intérieur du conteneur qui exécute postgres) que vous devez modifier.

1 « J'aime »

Je pense aussi. :+1:

Êtes-vous sûr de cela ? Cela semble beaucoup. Voir PostgreSQL: Documentation: 13: 19.4. Resource Consumption

Si vous avez un serveur de base de données dédié avec 1 Go ou plus de RAM, une valeur de départ raisonnable pour shared_buffers est de 25 % de la mémoire de votre système. Il existe des charges de travail pour lesquelles des paramètres encore plus importants pour shared_buffers sont efficaces, mais comme PostgreSQL s’appuie également sur le cache du système d’exploitation, il est peu probable qu’une allocation de plus de 40 % de la RAM à shared_buffers soit plus efficace qu’une quantité plus faible.

Et ce n’est pas un serveur de base de données dédié, il y a aussi 32 processus unicorn dessus.

Je m’en remets toujours à vous sur ce genre de sujets, et je pensais citer un conseil que vous aviez donné par le passé, donc, NON, je ne suis pas sûr. :rofl:

Il est assez clair que les connexions sont le problème et que l’augmentation de la RAM à 25% de 32 Go pourrait aider en général, mais ce n’est pas la cause de l’erreur.

EDIT :

Ha ! C’est exactement ce dont je me souvenais, sauf qu’il semble que j’allais dépasser 50 %. . .

1 « J'aime »

Je plaide plus ou moins coupable

Mais c’était avant… :wink:

:100:

2 « J'aime »

Pourquoi ? Ce sont les causes de votre épuisement des connexions.

1 « J'aime »

J’ai cru comprendre quelque part qu’il était dit que UNICORN WORKER devait être 2 * CPU. J’ai donc fait le calcul pour obtenir 32. Dois-je réduire l’échelle ?

Nous avons essayé de modifier le paramètre de délai d’attente pour PSQL en exécutant ALTER ROLE discourse SET statement_timeout = '30000';. Et cette requête est celle qui a été bloquée, une fois toutes les quelques heures.


Je ne sais pas si vous ou quelqu’un d’autre avez une idée de ce qui s’est passé ?

Non, veuillez supprimer ceci et laisser les valeurs par défaut prendre place. C’est le cas classique de l’optimisation prématurée.

2 « J'aime »

Oui, vous avez touché à des choses que vous n’auriez pas dû toucher :wink:

1 « J'aime »

9 messages ont été déplacées vers un nouveau sujet : Recommandation pour le nombre de workers : cœurs × 2 ?