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

Java Discussion :

Récupérer la liste des thread "Stopped" : JNDI Ldap


Sujet :

Java

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 50
    Points : 40
    Points
    40
    Par défaut Récupérer la liste des thread "Stopped" : JNDI Ldap
    Bonjour la communauté,

    Je cherche à récupérer les références des thread qui ont été stoppés "status : stopped", dans mon cas, c'est une api qui les instancie, start et stop (DirContext dans JNDI) donc je n'ai aucune référence sur ces thread à fin de les mettre à null et inciter le GC à les virer de la mémoire

    la méthode close() de la classe DirContext permet de fermer la connexion (socket), de stopper le thread et de le laisser en mémoire, et dans mon cas, le pool du JNDI n'étant pas activé, une connexion (via DirContext) est crée pour chaque requête.

    J'ai fait monter en charge mon serveur (un webservice utilisant des connexions vers un LDAP) via l'outil SOAPUI, j'arrive à avoir plusieurs milliers de Thread en mémoire avec le statut "Stopped" donc morts et obsolètes, même s'ils ne consomment pas de CPU, j'aimerais les virer toute même de ma précieuse mémoire.

    J'ai constaté via le debugger d'eclipse que l'objet DirContext contient une référence vers un objet LdapClient qui contient à son tour une référence vers un socket et le thread associé, mais je ne trouve aucun moyen public de récupérer ces informations pour exterminer le thread après le close().

    J'espère que j'ai été un peu clair.

    Par avance Merci pour votre aide.

    inflation

  2. #2
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Le principe du GC c'est qu'il passe quand il en a envie. En général, c'est soit pour récupérer des objets avec une durée de vie très courte (une méthode), soit quand la JVM a besoin de mémoire.

    Est-ce que tu gardes des références sur le DirContext ?
    Génères un heapdump avec "jvisualvm"
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 50
    Points : 40
    Points
    40
    Par défaut
    Bonjour Nemek,

    Citation Envoyé par Nemek Voir le message
    Le principe du GC c'est qu'il passe quand il en a envie. En général, c'est soit pour récupérer des objets avec une durée de vie très courte (une méthode), soit quand la JVM a besoin de mémoire.

    Est-ce que tu gardes des références sur le DirContext ?
    Génères un heapdump avec "jvisualvm"
    Je te remercie pour ta réponse,

    Pour le DirContext, je le close en fin de requête via la méthode close() puis je le met à "null" juste au cas où

    Pour la politique de la JVM, elle ne semble pas virer les thread mis à l'état "Stopped" et je pense qu'ils sont référencés quelque part

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 50
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Nemek Voir le message
    Génères un heapdump avec "jvisualvm"
    Pardon, je viens juste de remarquer ça je vais creuser ça..thx

  5. #5
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Les threads (stopped ou pas, comme tous les autres objets) sont libérables quand ils ne sont plus référencés. Tu peux également t'assurer qu'ils sont libérables en invoquant le Garbage Collector plusieurs fois via jvisualvm.

    Après tu as des outils d'analyse plus poussé que jvisualvm (ex: MemoryAnalyzer).
    Mais tu as au moins accès à la liste des objets qui ont une référence vers un objet qui t'interresse.
    Il existe également un langage de requêtage (OQL) pour faire des recherches dans le dump.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Les dircontext donc indirectement référencent le thread: ce sont donc les DirContext que tu dois arrêter de référencer -> regarder où est maintenue cette référence et la mettre à null dans ton code.

  7. #7
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Citation Envoyé par inflation Voir le message
    Pour le DirContext, je le close en fin de requête via la méthode close() puis je le met à "null" juste au cas où


    Je sais je suis fou je lui fais confiance, je suis optimiste.
    De toutes façons l'analyse du heapdump devrait lui dire s'il a loupé quelque chose de ce côté là.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 50
    Points : 40
    Points
    40
    Par défaut
    Merci les gars, j'ai essayé mais j'ai eu d'autres soucis et je pense utiliser le pool du JNDI comme ça je serai tranquille.

    Encore Merci.

Discussions similaires

  1. Comment récupérer la liste des contacts de outlook express?
    Par arnaud_verlaine dans le forum Outlook Express / Windows Mail
    Réponses: 6
    Dernier message: 12/10/2004, 15h53
  2. Comment récupérer la liste des logiciels installés sur une machine ?
    Par david_chardonnet dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 19/09/2003, 17h41
  3. Récupèrer la liste des disques durs
    Par Tililian dans le forum C++Builder
    Réponses: 4
    Dernier message: 19/06/2003, 12h42

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