2 votes

le serveur raccroche ; pas de réponse, mais pas de déconnexion non plus

Salutations d'experts,

Système : installation standard de gentoo avec pas grand chose de plus que postfix.

J'étais au milieu d'une grande migration de courrier électronique pilotée par IMAP la nuit dernière (un tas de scripts Perl) lorsque le nouveau serveur de courrier a cessé de répondre. Cependant, mes connexions SSH sont toujours actives et ne tombent pas. Les nouvelles connexions se bloquent (avant l'authentification), mais ne s'interrompent pas.

Cela signifie-t-il qu'elle finira par se rétablir ? Ou dois-je redémarrer le serveur ?

0 votes

Avez-vous vérifié les journaux pour voir ce qui se passe ?

0 votes

Veuillez fournir /var/log/mail.err et la configuration de postfix.

0 votes

Topdog : J'aimerais bien, mais ça ne répond pas du tout.

0voto

Jomit Points 458

Un redémarrage était nécessaire. L'attendre n'a rien donné.

Après une enquête plus approfondie, il a été découvert qu'il y avait une fuite de mémoire dans la bibliothèque Perl IMAP utilisée. À l'origine, j'avais configuré le script Perl pour charger tous les comptes de messagerie dans un tableau (à partir d'un fichier texte référencé à partir de l'argument 1 de la ligne de commande), puis les parcourir en boucle en exécutant le code de migration pour chaque compte. Pour chaque itération de la boucle, le script se connectait à la fois au serveur de messagerie source et aux serveurs de messagerie cible, exécutait le code de migration, puis se déconnectait des deux serveurs de messagerie. Cela a fini par consommer toute la RAM disponible, puis tout le SWAP disponible, jusqu'à ce que finalement init a tué le processus.

J'ai pensé que je pourrais accélérer les choses : J'ai utilisé screen pour exécuter 9 de ces processus, chacun sur un ensemble différent de comptes. Après avoir lancé neuf de ces processus, le système s'est rapidement ralenti, puis a cessé de répondre. Je suppose que init aurait éventuellement a tué tous les processus Perl, mais combien de temps cela aurait-il pris ? Un redémarrage était donc nécessaire.

J'ai modifié mon script de migration Perl script pour faire un compte, puis sortir. Ensuite, j'ai mis en place une boucle bash comme ceci pour parcourir tous les comptes provenant du même fichier texte :

# cat run_migration4.sh
#!/bin/bash

FILE=$1

# read $FILE using the file descriptors
exec 3<&0
exec 0<$FILE

while read line
do
        # use $line variable to process line
        echo line: $line
        ./migration4.pl $line
done
exec 0<&3

Cela a très bien fonctionné. J'ai pu en exécuter neuf en une seule session d'écran et elles ont toutes consommé une quantité insignifiante de RAM, loin de la limite 4G du serveur. La charge moyenne du serveur n'a jamais dépassé 2 ou 3. Tout s'est déroulé sans problème.

0voto

Janne Pikkarainen Points 31244

Peut-être que le noyau a épuisé son entropie. Cela peut arriver au moins avec le serveur IMAP de Cyrus s'il n'est pas configuré pour utiliser /dev/urandom comme source d'aléa et si le serveur n'est pas capable de générer suffisamment d'aléa "réel" pour /dev/random . Vos symptômes correspondent à ceux que j'ai rencontrés il y a des années.

Pour vérifier si c'est le cas pour vous, laissez-nous

watch -n1 'cat /proc/sys/kernel/random/entropy_avail' 

または

while true; do cat /proc/sys/kernel/random/entropy_avail >>/somepath/available_entropy.txt; sleep 1; done

et voyez si l'entropie disponible tombe constamment à 0 ou presque pendant le blocage IMAP. Si c'est le cas, le logiciel du serveur IMAP attend un nouvel aléa.

Une façon d'obtenir plus d'entropie est d'installer rngd Dans le cas de Gentoo, cela signifie que emerge rng-tools puis de lancer le rngd (Random Number Gathering Daemon). Il transfère le caractère semi-aléatoire de /dev/urandom vers /dev/random si le caractère aléatoire réel est trop faible.

Avertissement obligatoire : dans les environnements über-sécurisés, ce n'est pas ce que vous voulez.

0 votes

L'entropy_avail tournait autour de 3500 (pendant la migration), descendant occasionnellement en dessous de 3100, mais généralement autour de 3500. Après un redémarrage, l'entropy_avail est tombé à moins de 150. J'ai installé rng-tools et lancé rngd : # rngd ne peut pas ouvrir /dev/hwrandom : No such file or directory

0 votes

J'ai remarqué que je manquais de mémoire en exécutant mon script de migration Perl script. Je l'ai modifié pour ne faire qu'un compte à la fois (étant lui-même exécuté à partir d'une boucle bash) et cela a fait toute la différence du monde. Il devait y avoir une fuite de mémoire dans mon script ou dans la bibliothèque que j'utilisais, ce qui a provoqué le blocage complet du système avant que tous les processus puissent être tués. Le fichier 'entropy_avail' est devenu assez bas avec rngd en cours d'exécution (pas moins de 110), mais tout a bien fonctionné.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X