Erreurs de mémoire insuffisante avec plugin personnalisé

Quelqu’un pourrait-il fournir des instructions pour configurer l’allocation de mémoire ?

Étant donné les messages sporadiques du noyau « out of memory » / dump, le triplement des échanges (swap) et la dégradation croissante de la réponse des applications, il semble que notre application manque parfois de mémoire. Notre système dispose actuellement de 8 Go de mémoire et de 2 Go d’espace d’échange. Détails ci-dessous.

J’ai examiné les instructions pour ajouter plus de mémoire physique et d’espace d’échange à l’adresse ("Cannot allocate memory" when upgrading), mais je n’ai pas pu trouver de détails sur la façon de l’allouer.

En ce qui concerne les configurations de mémoire, nous utilisons tous les paramètres par défaut. Le système se rétablit après quelques minutes, mais avec une utilisation accrue, nous pensons qu’il est temps de nous informer sur la façon d’améliorer les performances. Je ne suis cependant pas sûr de l’endroit et de la manière de configurer cela. Augmenter la mémoire allouée à l’instance Docker, ou le nombre de processus Ruby Unicorn (ou les deux) ?

Je suis administrateur système sans expérience Ruby et avec une expérience limitée de Docker, donc me diriger vers le fichier de configuration et la syntaxe à utiliser m’aiderait grandement.

Discourse 2.6.0 beta2
Ruby 2.3.1-2~ubuntu16.04.14
Ubuntu 16.04

Combien de licornes exécutez-vous ? Cela est défini dans votre fichier /var/discourse/containers/app.yml.

Bonjour Rafael - Dans la section “env” de app.yml, je vois que nous sommes configurés pour utiliser 4.

1 « J'aime »

Avez-vous relancé discourse-setup après avoir augmenté votre RAM ? Cela ajustera automatiquement les paramètres de mémoire. Vous pouvez également consulter les commentaires dans app.yml et les modifier si nécessaire.

1 « J'aime »

Obtenir une erreur OOM avec seulement 4 unicorns est vraiment étrange. Cela devrait consommer environ 2 Go, laissant 6 Go pour PG et Redis.

Vous devez investiguer quel processus consomme toute la mémoire lors d’un événement OOM, ce n’est pas normal.

3 « J'aime »

Bonjour Rafael et l’équipe, je m’appelle Serge et je travaille avec M. Happy Lee, qui vient de partir pour ses vacances tant attendues. Je vais donc prendre en charge ce problème.

Pour compléter la description : le serveur a été initialement configuré avec 8 Go de RAM et 2 Go d’espace d’échange (swap). Nous ne l’avons pas mis à niveau depuis.

Dans le journal système, je constate des preuves que Ruby est le processus qui consomme toute la mémoire, provoquant ainsi un OoM (Out of Memory) du noyau :

Killed process 2960 (ruby) total-vm:10031472kB, anon-rss:7438148kB, file-rss:0kB

Je ne suis pas expert en Ruby, aussi je ne sais pas comment identifier quel processus Ruby consomme autant de mémoire.

Toute suggestion serait la bienvenue.

Merci.

-Serge

Exécutez-vous des plugins sur cette installation Discourse ?

Nous utilisons bien le plugin personnalisé Scheduled Digest, mais il fonctionne également sur nos deux autres installations, qui ne rencontrent aucun problème.

Pourriez-vous partager ici le lien vers le dépôt de code source de ce plugin ?

1 « J'aime »

Bonjour Rafael,

Notre organisation a financé le développement de ce plugin, je ne suis donc malheureusement pas autorisé à rendre le code source accessible ici. De plus, comme le plugin fonctionne sans problème sur d’autres instances, cela me fait penser à augmenter les ressources mémoire du serveur pour celui-ci. La machine est une VM, je peux donc facilement doubler la quantité de mémoire et voir si cela résout le problème.

D’accord, bonne chance !

Il n’y a pas grand-chose que nous puissions faire pour déboguer du code que nous ne pouvons pas voir de notre côté. Vous pourriez envisager d’installer le plugin d’export Prometheus pour Discourse afin de suivre les métriques de votre instance.

1 « J'aime »

Les autres instances exécutent-elles également Ruby 2.3.1-2~ubuntu16.04.14 ?

Peut-être sans rapport, mais :

il s'agissait donc clairement d'un bug de Ruby. Nous avons testé sur plusieurs versions de Ruby et déterminé que seules les versions 2.3.x et 2.4.x présentaient la fuite (apparemment, cela a été corrigé dans Ruby 2.5.0****).

Et le fichier README de Discourse demande [Ruby 2.6+] :roll_eyes:

1 « J'aime »

Merci ! Je posterai une mise à jour quand ça se calmera.

Salut Benjamin, les autres instances exécutent également Ruby 2.3.1-2~ubuntu16.04.14. Je vais tester une mise à jour pour voir si cela ne casse pas notre configuration Docker.

La version de Ruby n’a pas d’importance ici.

Tant que vous utilisez notre image Docker officielle, vous utiliserez la version prise en charge correcte de Discourse.

2 « J'aime »

Ce sujet a été automatiquement fermé après 26 heures. De nouvelles réponses ne sont plus autorisées.