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. #21
    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 je comprend, en fait je crée les threads une fois pour toute et je ne l'ai detruit qu'a la fin du traitement. Chaque thread faisant des centaines voire des milliers d'accé ftp.

    Concernant les close() sur QFtp, il me semble que close() envoie un message de fin au serveur, mais que la liaison est rompu, le close() ne se termine pas non plus, il me semble

  2. #22
    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
    Si ton nombre de threads est limité, tout va bien de ce côté. Il faut donc chercher ailleurs. close() ferme la connection mais ne détruit pas l'objet QFtp.

    Regarde si tu détruits bien tes objets QFtp (s'ils sont alloués dynamiquement).

    Une solution est peut-être de passer par un pool de connexion et une file d'attente, parce que tu ne peux pas avoir trop de connexion ftp ouvertes à la fois.

  3. #23
    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 ne sais pas ce que tu entends par limité, j'atteind aisémen la centaine.
    De plus j'ai l'impression que faire un close() sur un ftp qui est en attente de réponse ou planté, cause plus de soucies que d'autre chose. Je fais plutot un abord(), mais là je suis pas tres compétant !

  4. #24
    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
    S'il n'y a pas de problème de libération de ressource et que ton programme utilise un nombre trop important de ressource jusqu'à atteindre la limite autorisée, tu peux utiliser un gestionnaire de ressource qui t'évitera d'avoir ce problème. En gros, tu lui donnes une limitation maximale, et quand elle l'atteint, alors, les proccess doivent attendre qu'une nouvelle ressource se libère avant de l'utiliser.

    Mais bon, je ne sais pas si c'est ton vrai problème en occurrence...

  5. #25
    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
    Je ne sais pas ce que tu entends par limité, j'atteins aisément la centaine.
    Par limité, j'entends que tu n'en crées pas à la volée, et donc, tu ne peux pas (facilement) les perdre.

    Par contre, comment se fait-il que tu aies besoin d'autant de thread ? Il y aurait un problème de conception là-derrière que ça ne m'étonnerait pas.

    abort(), de même que close(), ne te détruira pas l'objet QFtp. Si tu le crées dynamiquement (au moyen de new), il faut que tu le détruises de la même manière (au moyen de delete).

  6. #26
    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
    Historiquement, je gérais une petite dizaines de machines via mon client via des thread séparé par commodité. ca fonctionnait parfaitement. Depuis, cause aquisition cluster , je suis passé à plus de 100, j'aurais du probablement revoir le concepte, mais manque de temps .
    Maintenant j'aimerai bien deleter mes QFtp, mais malheureusement cette operation est fortement instable! Il semblerait que ce soit due à un probleme sur cette class de Qt

  7. #27
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Salut,

    Pour supprimer tes instances de QFtp, as-tu tenté d'appeler close(), de stocker l'id de l'action lancée, puis d'appeler delete (ou peut-être deleteLater, j'ai un trou) lorsque le signal commandFinished correspondant à l'id du close est reçu ?

  8. #28
    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
    Le problem que j'ai est quand je pert la connection pour une raison indéterminé (type perte de server) mes command, close() compris ne me rendent jamais la main, le signal commandFinished n'est jamais émit. Je ne sais pas pourquoi et surtout pourquoi n'y a t-il pas un time_out !

  9. #29
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    close() étant asynchrone, je serais assez étonné que cet appel ne te rende pas la main. Ou bien c'est lié à ton manque d'architecture prévue pour autant de threads (on n'a toujours pas de détails sur ta stratégie de répartitions de tâches si je n'ai raté aucun message ).

    Je suis d'accord qu'un timeout est manquant à cette classe (peut-être dans une prochaine version...), mais c'est trivial à implémenter par toi même. Et si ce n'est pas déjà fait, il faudrait le faire, et lorsque le timeout est reçu, tu supprimes les actions en attente, tu déconnectes les slots et supprime ton instance.

  10. #30
    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
    L'architecture est la suivante:
    Un client repartie sur N machine un certain nombre de calcul completement independant mais tres gourmand. ce client creer pour chaque machine un thread dans lequel est gerer les dialog avec la machine distance.
    Un thread general dialog et gére cette ferme de thread donc de machine.

    Trés simple et efficace pour une dizaine de machine, commence à etre limite pour une centaine. Mais pour info, cela fonctionne trés bien maintenant que j'ai redirigé SIGPIPE->SIG_IGN

  11. #31
    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
    Mais pour info, cela fonctionne trés bien maintenant que j'ai redirigé SIGPIPE->SIG_IGN
    À mon avis, ça ne plante plus mais ça ne marche pas, c'est juste que tu ne t'en aperçois pas.

    Sinon, pour Qftp, visiblement, il faut attendre qu'il soit en état Unconnected pour le deleter.

  12. #32
    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
    Merci, Je vais essayer ca.
    Sinon, j'insiste ca fonctionne parfaitement maintenant, l'appli manage correctement son parc de machines et recoit les resultats attendues, les quelques connections invalides qui généraient un SIGPIPE et faisaient planter l'appli sont maintenant transparente. J'en crée de nouvelle quand elles se plantent voila tout.
    Je dois maintenant manager correctement leurs fermeture pour eviter de saturer le systeme au bout de quelques semaines.

    Merci à tous de vos conseils éclairés

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