Correction de l'erreur « Trop de fichiers ouverts » de Matrix Synapse sur systemd

Matrix Synapse peut démarrer normalement puis cesser d'accepter les connexions, afficher le message « Trop de fichiers ouverts » ou sembler bloqué en raison d'une charge importante. Sur une installation systemd, il convient de vérifier en premier lieu la limite de descripteurs de fichiers héritée par le processus Synapse en cours d'exécution. Modifier les ulimitlimites du shell ou un fichier PAM n'a généralement aucun impact sur la limite d'un service lancé par systemd.

Les étapes ci-dessous s'appliquent à un système Linux hôte où Synapse est exécuté en tant que service systemd. L'unité peut porter un nom matrix-synapse.servicespécifique matrix-synapse@.serviceau paquet. Vérifiez le nom réel de l'unité avant de copier les commandes. Si Synapse est exécuté dans un conteneur Docker, Kubernetes ou autre, consultez la section correspondante ci-dessous.

Que signifie « Trop de fichiers ouverts » ?

Linux impose à chaque processus une limite de descripteurs de fichiers ouverts. Un descripteur peut faire référence à un fichier, un socket, un tube ou toute autre ressource ; les connexions réseau consomment donc également des descripteurs. Lorsqu'un processus atteint sa limite logicielle, toute tentative d'ouverture ou d'acceptation d'un autre descripteur peut échouer EMFILE. Linux dispose également d'une limite distincte pour la table des fichiers système : son épuisement peut entraîner une erreur ENFILE. Augmenter la limite d'un service Synapse ne résoudra pas une pénurie à l'échelle du système.

La FAQ officielle d'administration de Synapse indique qu'une activité de connexion et de fédération élevée peut consommer de nombreux descripteurs de fichiers et que leur saturation peut empêcher le serveur d'accepter de nouvelles connexions TCP. Elle recommande d'augmenter la limite à au moins 4 096 connexions par défaut, par exemple 1 024 ou 256. Cette valeur doit être considérée comme un seuil minimal de dépannage pour la situation décrite, et non comme une recommandation universelle pour tous les serveurs domestiques. Commencez par vérifier la limite effective et l'utilisation réelle.

La documentation de Linux relative aux fonctions `getrlimit` et `prlimit` décrit les limites logicielles et matérielles par processus. Synapse propose également une soft_file_limitoption ; la documentation de configuration de Synapse indique une valeur par défaut de zéro, ce qui signifie que Synapse définira sa limite logicielle sur la limite matérielle qu'il peut utiliser.

1. Vérifiez l'unité et diagnostiquez la panne.

Commencez par identifier le nom du service. Sur de nombreuses installations de paquets, il s'agit de « service » matrix-synapse.service, mais ne présumez pas de ce nom si votre installation utilise une unité ou des workers personnalisés.

systemctl list-units --type=service --all | grep -i synapse
systemctl status matrix-synapse.service --no-pager
journalctl -u matrix-synapse.service --since "30 minutes ago" --no-pager

Recherchez l'erreur exacte, l'heure à laquelle elle a commencé et si elle survient lors d'un pic de trafic, d'une activité de fédération ou d'un redémarrage. Ensuite, examinez la limite actuellement signalée par systemd :

systemctl show matrix-synapse.service -p LimitNOFILE -p MainPID

LimitNOFILECette commande affiche la limite configurée du gestionnaire de services ; elle ne correspond pas au nombre de descripteurs actuellement ouverts. Une commande shell telle que ` ulimit -nls` ne fait que signaler la limite du shell courant et ne constitue pas une preuve de la limite du service.

2. Augmentez la limite du service systemd avec un fichier de configuration.

Utilisez un module systemd pour que les mises à jour de paquets n'aient pas à modifier le fichier d'unité du fournisseur. La valeur suivante est un exemple et ne constitue pas une solution idéale garantie pour tous les serveurs. Choisissez une limite supérieure à la consommation maximale observée et vérifiez la compatibilité des applications et des dépendances avant de définir une valeur anormalement élevée.

sudo systemctl edit matrix-synapse.service

Ajoutez ceci sous le nouveau module complémentaire de l'éditeur :

[Service]
LimitNOFILE=65536

Enregistrez et quittez, puis rechargez systemd et redémarrez Synapse pendant une fenêtre de maintenance appropriée :

sudo systemctl daemon-reload
sudo systemctl restart matrix-synapse.service
systemctl show matrix-synapse.service -p LimitNOFILE

Une seule LimitNOFILEvaleur définit à la fois la limite souple et la limite stricte du service dans systemd. La documentation de systemd autorise également une soft:hardpaire de limites. La limite souple ne peut pas dépasser la limite stricte. Avant de choisir une valeur très élevée, consultez la documentation de systemd.exec , qui signale des problèmes de compatibilité pour les programmes utilisant l'ancienne select(2)interface avec des descripteurs supérieurs à 1 023. Ne présumez pas que toutes les bibliothèques ou tous les plugins de votre environnement prennent en charge n'importe quelle limite.

3. Vérifiez les paramètres et les services de travail de Synapse.

Si votre configuration Synapse définit explicitement soft_file_limitune valeur faible, le paramètre de l'application peut maintenir la limite logicielle en dessous du plafond de systemd. Recherchez cette clé dans les fichiers de configuration actifs et la configuration incluse. Supprimez toute substitution inutile ou définissez-la délibérément ; la valeur par défaut documentée de zéro demande à Synapse d'augmenter sa limite logicielle jusqu'à la limite matérielle disponible.

Dans un déploiement multiprocessus, chaque processus de travail est distinct et peut être lancé par une unité ou une instance de modèle séparée. Augmenter la limite du service principal ne garantit pas automatiquement que chaque processus de travail bénéficie de la limite prévue. Examinez les noms réels des unités de travail systemctl list-units, puis appliquez et vérifiez le composant approprié pour chaque service qui en a besoin.

De même, les paramètres de configuration /etc/security/limits.confd'un shell de connexion ulimitne régissent généralement pas un service système lancé directement par systemd. Dans ce cas, modifiez la limite de ressources de l'unité et vérifiez-la sur le processus effectivement démarré par systemd.

4. Si Synapse s'exécute dans un conteneur

Une substitution systemd au niveau de l'hôte pour un service différent ne modifie pas automatiquement la limite de descripteurs de fichiers d'un conteneur. Configurez l'environnement d'exécution ou la couche d'orchestration du conteneur. Pour Docker Compose, la définition de service prend en charge les conteneursulimits ; voici un exemple :

services:
  synapse:
    ulimits:
      nofile:
        soft: 65536
        hard: 65536

Ce nombre est donné à titre indicatif ; ajustez-le en fonction de l'utilisation et des limites de l'hôte. La documentation du service Docker Compose décrit ce ulimitsparamètre. Depuis Docker Engine 29, les notes de version de Docker indiquent une modification de la limite nofile par défaut associée à containerd 2.1.5 : les conteneurs peuvent désormais recevoir 1 024 au lieu des 1 048 576 précédents. Si le problème est apparu après une mise à niveau d'Engine, vérifiez la limite effective des conteneurs et définissez explicitement la limite ulimit nécessaire dans la configuration du déploiement. Consultez les notes de version de Docker Engine 29 et la documentation de la commande docker run .

5. Vérifiez la limite du processus Synapse en cours d'exécution

Après le redémarrage, vérifiez la limite au niveau du processus, et pas seulement la configuration de systemd. Obtenez le PID principal et examinez ses limites signalées par le noyau :

PID=$(systemctl show --property=MainPID --value matrix-synapse.service)
grep "Max open files" "/proc/$PID/limits"
find "/proc/$PID/fd" -mindepth 1 -maxdepth 1 | wc -l

Si le PID principal est nul ou appartient à un wrapper plutôt qu'à Synapse, identifiez le processus Synapse dans le cgroup du service et examinez son PID. Le nombre de descripteurs est un instantané ; refaites la mesure lors d'une charge représentative. Vérifiez que le nombre maximal de fichiers ouverts correspond à vos limites souples et strictes, que ce nombre reste largement inférieur à la limite souple et que le journal ne signale plus l'erreur.

Si le nombre de requêtes continue d'augmenter jusqu'à atteindre le nouveau plafond, la limite ne fait peut-être que repousser l'échéance. La FAQ de Synapse indique que les requêtes bloquées ou lentes peuvent être pertinentes lors de l'analyse d'une saturation des descripteurs de fichiers. Il est conseillé d'examiner les journaux et le traitement des requêtes environnants, de comparer le nombre de descripteurs au fil du temps et de rechercher une éventuelle fuite ou des connexions anormalement persistantes plutôt que d'augmenter la limite sans discernement.

Quand augmenter la limite par service ne suffit pas

Si les journaux signalent une erreur de saturation de la table de fichiers système ENFILE, examinez l'utilisation globale de l'hôte et les autres services ; une LimitNOFILEmodification par service n'augmentera pas la capacité globale du noyau. Évitez de modifier les limites globales du noyau sans avoir confirmé l'erreur et compris l'impact sur l'hôte. Si la limite signalée du service reste faible après l'ajout d'une ressource, exécutez la commande systemctl cat matrix-synapse.servicepour confirmer que la ressource est chargée, vérifiez le nom de l'unité, rechargez systemd et redémarrez l'unité concernée.

Auto-évaluation rapide

  • Avez-vous identifié l'unité ou le conteneur Synapse exact qui enregistre l'erreur ?
  • Le rapport indique-t-il systemctl showla limite prévue pour cette unité ?
  • Affiche-t- il /proc/<Synapse-PID>/limitsles limites logicielles et matérielles prévues après le redémarrage ?
  • Le nombre de descripteurs est-il inférieur à la limite souple sous une charge de pointe normale ?
  • Les paramètres des unités de travail et des conteneurs sont-ils vérifiés séparément le cas échéant ?
  • L'erreur a-t-elle disparu ou l'utilisation continue-t-elle de croître jusqu'à la nouvelle limite ?

Si tous les contrôles au niveau du processus sont concluants et que l'erreur a cessé lors d'un trafic représentatif, la modification de la limite par systemd est efficace. Si les descripteurs continuent de s'accumuler ou si le système signale une pénurie globale, il convient de poursuivre l'investigation de la source plutôt que de considérer une limite plus élevée comme une solution définitive.

Sources

Laisser un commentaire

Les 7 meilleurs outils WSUS pour la gestion des mises à jour et le dépannage

Les 7 meilleurs outils WSUS pour la gestion des mises à jour et le dépannage

Comparez sept outils qui prennent en charge ou complètent WSUS, allant de la console et des diagnostics natifs de Microsoft à la publication de correctifs tiers et au déploiement à distance.

Meilleurs outils de surveillance système Windows : 6 solutions pour une visibilité optimale des serveurs

Meilleurs outils de surveillance système Windows : 6 solutions pour une visibilité optimale des serveurs

Comparez six outils de surveillance système Windows pour l'état du serveur, la visibilité des applications et les alertes, avec des informations actualisées sur le déploiement et les licences.

7 outils Wake-on-LAN : lesquels sont encore disponibles dans la liste de 2021 ?

7 outils Wake-on-LAN : lesquels sont encore disponibles dans la liste de 2021 ?

Comparez sept outils Wake-on-LAN en fonction de leurs fonctionnalités et de leur disponibilité, y compris les utilitaires gratuits, les suites d'administration réseau et les outils sélectionnés en 2021 qui ont depuis été retirés du marché.

Les 9 meilleurs outils de ping pour tester la latence et analyser un réseau

Les 9 meilleurs outils de ping pour tester la latence et analyser un réseau

Comparez neuf outils de ping pour des vérifications rapides d'accessibilité, la découverte de sous-réseaux, les tests TCP et la surveillance de la latence, avec des conseils pour choisir celui qui convient le mieux à votre tâche réseau.

Meilleurs serveurs TFTP pour Windows, Linux et macOS

Meilleurs serveurs TFTP pour Windows, Linux et macOS

Comparez les meilleurs serveurs TFTP pour Windows, Linux et macOS, notamment SolarWinds, Tftpd64, tftpd-hpa, atftpd, haneWIN et dnsmasq.

5 des meilleures alternatives à Microsoft Access pour les bases de données de bureau et Web

5 des meilleures alternatives à Microsoft Access pour les bases de données de bureau et Web

Comparez cinq alternatives à Microsoft Access pour le travail sur bases de données de bureau, SQLite, sans code et basées sur navigateur, avec leurs points forts, leurs limites et leurs cas d'utilisation les plus adaptés.

Comparaison des outils de surveillance open source et propriétaires

Comparaison des outils de surveillance open source et propriétaires

Comparez les outils de surveillance open source et propriétaires en fonction du coût, du support, de la personnalisation, de la sécurité et des options actuelles, notamment Zabbix, Nagios, PRTG et plus encore.

Entrée vs. Sortie : Quelle est la différence en matière de mise en réseau ?

Entrée vs. Sortie : Quelle est la différence en matière de mise en réseau ?

Comprendre comment les termes « entrée » et « sortie » décrivent le trafic entrant et sortant, pourquoi la direction dépend des limites du réseau et comment surveiller la bande passante et repérer les transferts de données à risque.

6 serveurs Syslog gratuits à essayer pour la journalisation centralisée

6 serveurs Syslog gratuits à essayer pour la journalisation centralisée

Comparez six serveurs et collecteurs syslog gratuits pour Windows et Linux, incluant des outils GUI, des options open source, la recherche, les alertes et le transport sécurisé.

Qu'est-ce qu'IIS ? Le serveur web Windows de Microsoft et ses alternatives

Qu'est-ce qu'IIS ? Le serveur web Windows de Microsoft et ses alternatives

Découvrez ce que fait Microsoft IIS, comment fonctionnent son pipeline de requêtes et ses pools d'applications, et quand Apache, NGINX ou Caddy peuvent mieux répondre à vos besoins en matière de serveur Web.