La machine entière se bloque pendant la mise à niveau

Depuis que j’ai essayé les plugins IA (et que je les ai ensuite retirés), ma machine se bloque totalement lors de /admin/upgrade.

Pas à chaque fois, mais environ 80% du temps.

Généralement, toute mon instance EC2 se fige et je dois effectuer un redémarrage forcé via l’interface web EC2 d’AWS.

Aujourd’hui, elle se bloque à nouveau. À ma surprise, elle ne se fige pas complètement. En ouvrant l’URL racine, elle affiche maintenant :

Oops

Le logiciel qui alimente ce forum de discussion a rencontré un problème inattendu. Nous nous excusons pour la gêne occasionnée.

Des informations détaillées sur l’erreur ont été enregist

Le plugin IA officiel ?

Je lancerais ceci depuis la console et verrais où il bloque, partagez les journaux.

1 « J'aime »

Oui, le plugin officiel.

Je l’ai désinstallé en supprimant à nouveau les plugins de app.yml, puis en reconstruisant. Peut-être que cela ne suffit pas ?

Qu’est-ce qui est entendu par « ceci » ? Le sudo ./launcher rebuild app ?

1 « J'aime »

Quelle est la configuration de votre serveur ?

Les mises à niveau en ligne, à mon avis, nécessitent de nos jours un serveur de 4 Go + 2 Go de swap au minimum.

2 « J'aime »

J’utilise une instance AWS EC2 « t2.medium » avec 2 vCPUs et 4 Gio de RAM.

Le disque dur fait 100 Gio avec 60 Gio d’espace libre.

Si cela peut aider, je peux passer de « t2.medium » à un type d’instance plus grand.

Je suis juste confus que cette configuration ait fonctionné de manière très stable (pendant des années) avant mes tests du plugin IA officiel et que ce ne soit que depuis, après l’avoir supprimé, que ces blocages se produisent lors de la mise à niveau.

1 « J'aime »

Autre chose a changé : la version du logiciel vers laquelle vous effectuez la mise à niveau. Elle est devenue plus gourmande en mémoire dernièrement. Je pense donc que cela pourrait être l’un ou l’autre.

Une mise à niveau temporaire et réversible vers une instance avec plus de RAM est probablement le moyen le plus simple de tester si le manque de mémoire est le problème, bien que cela coûte quelques redémarrages. L’autre moyen est d’ajouter du swap, ce qui est également réversible.

3 « J'aime »

J’essaierais d’ajouter du swap.

2 « J'aime »

Merci les gars, je vais chercher sur Google comment faire ça et ensuite je le ferai :slight_smile:.

Mise à jour 1

J’ai maintenant ajouté 8 Gio de swap :

$ free -h
               total        used        free      shared  buff/cache   available
Mem:           3.8Gi       290Mi       2.9Gi       1.0Mi       677Mi       3.3Gi
Swap:          8.0Gi          0B       8.0Gi

Je publierai une mise à jour ici après quelques prochaines mises à niveau pour voir si cela a aidé.

Mise à jour 2

Je viens de faire une /admin/upgrade et j’ai surveillé l’utilisation de la RAM :

$ free -h
               total        used        free      shared  buff/cache   available
Mem:           3.8Gi       1.4Gi       1.5Gi        50Mi       891Mi       2.0Gi
Swap:          8.0Gi       200Mi       7.8Gi

Et la mise à niveau s’est déroulée avec succès. :tada: J’espère que cela restera ainsi.

Mise à jour 3

Plusieurs jours et mises à niveau plus tard, je n’ai plus jamais connu de blocage.

Je pense donc que le swap était la solution. Merci encore à tous ceux qui m’ont aidé sur ce problème.

2 « J'aime »

C’est un peu hors sujet, mais j’aimerais vraiment comprendre. Pourquoi le swap, qui utilisait 200 Mo, a-t-il aidé alors qu’il restait 2 Go de RAM libre ?

(Je comprends qu’dans le monde des pouces, le système SI puisse être déroutant car il utilise une échelle de 10, mais pourquoi diable Mi ? Je peux en quelque sorte comprendre Gi si c’est l’abréviation de giga, mais méga devrait alors être Me ?)

1 « J'aime »

Mi pour Mebibytes je suppose, et Gi pour Gibibytes.

1 « J'aime »

Merci. Je ne le savais pas, évidemment. Mais c’est mebibyte :wink:

Et pour les autres qui ne le savaient pas non plus :smirking_face:

2 « J'aime »

Je pense que le problème initial était probablement qu’un processus était tué parce que la machine manquait de mémoire (attention au tueur OOM). L’ajout de swap a permis de ne pas épuiser la mémoire. Ces deux sorties de free ne racontent peut-être pas toute l’histoire, à moins qu’elles n’aient été prises très soigneusement au moment de la plus grande contrainte de la machine. C’est l’utilisation maximale du swap qui est intéressante, je pense.

Mais il y a aussi la question du réglage du noyau mentionné dans
MKJ’s Opinionated Discourse Deployment Configuration
que j’ai correctement configuré, mais que peut-être beaucoup de gens n’ont pas correctement configuré.

Il est à noter que la sur-allocation de mémoire n’a pas grand-chose à voir avec Redis. C’est juste que Redis est assez gentil pour suggérer qu’elle devrait être correctement configurée.

3 « J'aime »

Je viens de lancer un autre /admin/upgrade et j’ai ouvert un shell pour appeler manuellement tree -h environ une seconde.\n\nLes valeurs d’utilisation de mémoire les plus élevées que j’ai pu trouver étaient les suivantes :\n\ntxt\n$ free -h\n total used free shared buff/cache available\nMem: 3.8Gi 3.2Gi 120Mi 80Mi 542Mi 266Mi\nSwap: 8.0Gi 276Mi 7.7Gi\n\n\nLa mise à niveau a réussi.

1 « J'aime »

Donc 4 Go est juste à la limite au moment de la compilation, si l’on suppose que la dernière capture d’écran montre le moment le plus stressant.

Et c’est une autre chose que je ne comprends pas : pourquoi d’autres rencontrent des problèmes de mémoire faible et moi, qui utilise beaucoup de plugins et de composants, n’ai eu aucun problème :thinking: qu’est-ce qui fait cette différence ?

Et j’ai utilisé eu parce qu’aujourd’hui j’ai 8 Go grâce à l’IA (et pour moi la différence de prix n’était pas si importante, mais c’est une autre histoire).

Ce fil de discussion devrait-il être déplacé ailleurs ou considérons-nous cela comme une explication sur pourquoi l’utilisation du swap a aidé ?

Quoi qu’il en soit. Pour les autres débutants, voici un exemple où l’on parle un peu de la mémoire faible et des raisons à cela :

C’est une question très fréquente dans la FAQ lorsque la mise à niveau échoue. Mais la raison est rarement expliquée.

1 « J'aime »

@Jagster @uwe_keim pourriez-vous s’il vous plaît signaler la sortie de ces commandes

cat /proc/sys/vm/overcommit_memory 
cat /sys/kernel/mm/transparent_hugepage/enabled 

Sur mes systèmes, j’ai

# cat /proc/sys/vm/overcommit_memory 
1
# cat /sys/kernel/mm/transparent_hugepage/enabled 
always madvise [never]
1 « J'aime »
$ cat /proc/sys/vm/overcommit_memory
0

et

$ cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never
1 « J'aime »

Merci @uwe_keim - Je suppose que ces paramètres du noyau sont la raison pour laquelle vous avez dû ajouter du swap, même s’il ne semblait pas être utilisé. (Il en serait de même si vous aviez dû ajouter beaucoup de RAM, car la mémoire totale disponible est RAM + swap.)

1 « J'aime »

Je peux changer les paramètres du serveur à tout moment si vous me le recommandez.

root@foorumi-hel:/var/discourse# cat /proc/sys/vm/overcommit_memory
0
root@foorumi-hel:/var/discourse# cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never
2 « J'aime »

Je le recommande !

Cela corrigera le problème pour les redémarrages futurs (notez que cela écrase les fichiers sans vérifier l’état actuel) :

echo 'sys.kernel.mm.transparent_hugepage.enabled=never' > /etc/sysctl.d/10-huge-pages.conf
echo 'vm.overcommit_memory=1' > /etc/sysctl.d/90-vm_overcommit_memory.conf
sysctl --system
1 « J'aime »