Projet

Général

Profil

Tâche #35835

Scénario #35717: Permettre le tunning du nombre de fichiers ouverts par les démons basés sur twisted

Étude

Ajouté par Benjamin Bohard il y a environ 2 mois. Mis à jour il y a environ 2 mois.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Début:
01/10/2022
Echéance:
% réalisé:

100%

Restant à faire (heures):
0.0

Historique

#1 Mis à jour par Benjamin Bohard il y a environ 2 mois

  • Statut changé de Nouveau à En cours

#2 Mis à jour par Benjamin Bohard il y a environ 2 mois

Le signalement rapporte des erreurs de dépassement du nombre maximum de fichiers ouverts remontées par le service zephir.service.

La correction proposée modifie les tests fonctionnels de l’application. Je me demande si un effet de bord de la modification (redémarrage du service nécessaire par exemple) ne masque pas la cause de la résolution.

Pour l’instant, j’ai testé en diminuant drastiquement la limite à 2 pour voir si je peux facilement déclencher les erreurs. Je ne reproduis pas dans le cadre d’une utilisation légère du Zéphir (peu de modules enregistrés et joignables mais avec une périodicité de connexion courte de 2 min).

Pour lever le doute sur l’utilisation du code de test dans l’applicatif lui-même, j’ai intégré une erreur volontaire. Celle-ci ne s’est pas déclenchée dans le cadre du fonctionnement du service zephir (mais ce déclenche bien en exécutant pytest).

#3 Mis à jour par Benjamin Bohard il y a environ 2 mois

La déclaration du service zephir.service indique que la limite dure du nombre de fichiers ouvert est celle par défaut : 8192 (sortie de systemctl show zephir.service--property=LimitNOFILE).

Pour valider, une boucle ajouter dans zephir.backend.backend_tap.py ouvrant des fichiers et affichant le nombre d’ouverture atteinte avant le déclenchement de l’erreur donne le résultat de 8186.

    try:
        open_files = []
        print('+'*50)
        for i in range(9000):
            open_files.append(open(f'/tmp/open_file{i}', 'w'))
    except BaseException as err:
        print(err)
        print(f"Limite atteinte ? {i}")
    else:
        print(f"Limite atteinte ? {i}")
    finally:
        print('+'*50)
mars 20 12:17:40 zephir zephir_backend[1244982]: ++++++++++++++++++++++++++++++++++++++++++++++++++
mars 20 12:17:40 zephir zephir_backend[1244982]: [Errno 24] Too many open files: '/tmp/open_file8186'
mars 20 12:17:40 zephir zephir_backend[1244982]: Limite atteinte ? 8186
mars 20 12:17:40 zephir zephir_backend[1244982]: ++++++++++++++++++++++++++++++++++++++++++++++++++

#4 Mis à jour par Joël Cuissinat il y a environ 2 mois

  • Statut changé de En cours à Fermé
  • % réalisé changé de 0 à 100
  • Restant à faire (heures) mis à 0.0

Après discussion sur IRC, il s'avère que le problème n'est pas avéré sur EOLE > 2.5.2.
L'ajout une variable afin de rendre paramétrable la limite ne semble pas justifié à ce jour.

Formats disponibles : Atom PDF