IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Trop de fichiers ouverts


Sujet :

C++

  1. #1
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut Trop de fichiers ouverts
    Bonjour,

    Je suis sous linux et gcc 4.2.1, et j'ai un code en developpement plutot complexe avec des dizaines de threads et de connections ftp en même temps. Enfin un vrai micmac. Voila aprés quelque jour d'utilisation j'ai droit à un plantage du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GLib-ERROR **: Cannot create pipe main loop wake-up: Trop de fichiers ouverts
    J'ai bien essayer d'augmenter la nombre fichiers ouverts en même temps autorisé avec la func "setrlimit(RLIMIT_NOFILE,&corelimit)" mais si ca va surement me permettre de durer plus longtemps ce n'est évidemment pas satistfaisant. J'ai regardé un peut partout si j'oublié pas de fermer des fichiers ouvert mais sans rien trouver.

    Enfin y a-til moyen connaitre le nombre de fichiers ouverts dans un programme qui tourne, cela me permettrait de trouver le soucie.

    Merci d'avance

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    327
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 327
    Par défaut
    Bonjour,
    As tu jeter un oeil sur ce site http://www.linuxplusvalue.be/mylpv.php?id=203.
    J'espère que cela pourra d'aider.
    A bientôt

  3. #3
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    lsof ?

  4. #4
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Oui "WAKAN" comme je disais j'ai déjà regardé de ce coté, mais le probleme n'est pas là à priori.

    Isof ???

  5. #5
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    lsof est une commande sur les systèmes unix.
    man lsof pour plus d'info
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    sous linux, on peut simplement regarder dans le répertoire /proc/pid/fd pour avoir la liste des fichiers ouverts à un instant donné par le processus qui a pour numéro pid.

    Et pour traçer les ouvertures et fermetures de fichiers d'un processus au cours du temps, il y a la commande strace qui peut aussi être bien utile.

  7. #7
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Je n'ai pas ce type de répertoire sous Suze !

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Citation Envoyé par uriotcea Voir le message
    Je n'ai pas ce type de répertoire sous Suze !
    Ah. Ca peut arriver mais si c'est une version pas trop vieille c'est quand même inattendu. Ca produit une erreur si sous un shell tu lances la commande suivante:

    ??
    (ça liste les fichiers du processus shell)

  9. #9
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Le moyen c'est simple, c'est de faire en sorte que ton programme ne fuit pas des ressources...
    Utilise le RAII.

  10. #10
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Ok j'ai finit par trouver ce répertoire et surveiller mon code. A priori le nombre fichier ouvert est constant est faible. Je ne comprend donc pas ce type de plantage
    C'est Quoi RAII

  11. #11
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Citation Envoyé par uriotcea Voir le message
    C'est Quoi RAII
    http://arb.developpez.com/c++/raii/shared_ptr/

  12. #12
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Ça pue la mauvaise traduction en fait.

    Ce qu'il n'arrive pas à créer, ce n'est pas un fichier, mais un pipe. Probablement, leak de handle, mais pas nécessairement de fichiers.

    lance ton programme avec strace (regarde les options de strace, et grep est ton ami).

  13. #13
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Exact je vient de m'n rendre compte c'est les pipe de mes ftp qui visiblement pose problem. Au moment d'un plantage avec ce message j'avais ~150pipes d'ouvert. Est-ce beaucoup ?

  14. #14
    Membre éprouvé Avatar de krieg
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 75
    Par défaut
    Salut,
    Sur mon ordi j'ai une limite a 256. Mais j'ai l'impression que cela commence a faire pas mal.
    bye

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ulimit -a
    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) 6144
    file size               (blocks, -f) unlimited
    max locked memory       (kbytes, -l) unlimited
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 256
    pipe size            (512 bytes, -p) 1
    stack size              (kbytes, -s) 8192
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 266
    virtual memory          (kbytes, -v) unlimited

  15. #15
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Apres des heures de tests laborieux, j'ai trouvé que mon plantage etait due à un SIG_PIPE.
    Alors je peux les ignorer par
    signal(SIG_PIPE,SIG_IGN)
    Mais mes ftp sont dans des thread séparés. Ou dois je mettre cette instruction et n'est ce pas simplement repouser le probleme plus loing?

  16. #16
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Tu dois t'assurer de fermer les tubes en question une fois qu'ils ne sont plus utilisés, mais à part ça...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  17. #17
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Alors là, je ne sais pas trop comment fermer le pipe. Mes pipe sont créer sous Qt4 via la class Qftp

  18. #18
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Normalement, si tu appelles bien close() sur tes objets QFtp, il ne devrait pas y avoir de soucis.

    Est-ce que tu fais bien un join sur les threads que tu crées ? (wait() dans QThread).

  19. #19
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    white_tentacle , pourrais-tu etre plus explicite concernant 'un join' ?

  20. #20
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Normalement, quand tu crées un thread, et qu'il se termine, tu dois le "joindre", au moyen de pthread_join sous posix.

    Après, sous QT, je ne sais pas comment c'est fait, il y a bien wait(), mais peut-être que le join est aussi fait dans le destructeur (l'inverse métonnerait beaucoup).

    Je pense que tu perds des threads, c'est à dire que tu crées des QThreads, mais que tu ne les détruits jamais (ou pas tous). Tes threads tiennent l'objet QFtp, qui du coup n'est jamais libéré, du coup tu exploses en nombre de pipe.

Discussions similaires

  1. Parrait il que j ai trop de fichier ouvert, comment controler ceci
    Par pierrot10 dans le forum Administration système
    Réponses: 0
    Dernier message: 21/09/2009, 09h07
  2. Trop de fichiers ouverts
    Par HASSIOMAR dans le forum Bases de données
    Réponses: 4
    Dernier message: 20/10/2008, 16h02
  3. Pbm compilation trop de fichiers ouverts
    Par HASSIOMAR dans le forum Bases de données
    Réponses: 1
    Dernier message: 18/10/2008, 10h39
  4. [TP] Trop de fichiers ouverts : plantage
    Par Jeff on the web dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 18/01/2008, 15h23
  5. Trop de fichiers ouverts ...
    Par djidji dans le forum C
    Réponses: 4
    Dernier message: 01/12/2005, 17h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo