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

Eclipse Platform Discussion :

Freeze d'application RCP


Sujet :

Eclipse Platform

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2013
    Messages : 23
    Points : 6
    Points
    6
    Par défaut Freeze d'application RCP
    Bonjour,

    De façon totalement aléatoire, l'application RCP (3.7.0) sur laquelle je bosse freeze (écran blanc). Il n'y a rien à faire à l’exception de couper le processus de l’application et relancer.
    Ça ne se produit pas sur un traitement particulier et il n'y a absolument aucune exception de levée, du moins, dans les logs de l'application.

    Cela fait des mois que je bute sur ce problème. Tout laisse à penser qu'il s'agirait d'un bug de thread ihm...

    Si quelqu'un a la moindre idée, je suis preneur, Merci.


    Informations complémentaires :

    L'application est assez conséquente (182 classes, 31 568 fonctions et 343 303 instructions exécutables) et est utilisée par une quarantaine de personnes.
    Bien qu'elle soit utilisée sur MAC (et VM) et WIN, le bug semble ne se produire que sur windows (VISTA 64b).

    Il y a en pièces jointes :

    • Une capture d'écran de l'application durant le freeze

    • Le fichier de configuration de l'application (xmx,...)

    • Une capture d'écran du visual VM

    • Le thread dump lors du freeze - trop volumineux pour être importé... (Accessible via http://dl.free.fr/t5Mc1tgrJ : 44Mo - mdp : "JSE_TD")

    • Une capture d'écran de l'eclipse (dev)


    Merci
    Images attachées Images attachées    
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    Est-ce que tu peux fournir le fichier de log de ton workspace? (qui devrait être plus parlant)
    Il se situe dans ton workspace: [Wkspace]/.metada/.log

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2013
    Messages : 23
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Voici les fichiers demandés.
    Les derniers freeze remontent au 26/03.

    2 erreurs souvent remontées :

    • org.eclipse.swt.SWTError: No more handles

    • org.eclipse.swt.SWTException: Graphic is disposed
    Fichiers attachés Fichiers attachés

  4. #4
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Tu as peut-être une fuite mémoire (oui, ça peut arriver). Je te conseille d'utiliser Sleak sur ton application pour voir où pourrait être ton problème.

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2013
    Messages : 23
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Si j'avais bel et bien une fuite mémoire, j'aurais du le voir dans le visualVM que je suis en temps réel. RAS de ce côté là.

    Avez-vous d'autres suggestions svp ?

    Merci

  6. #6
    Membre émérite
    Avatar de Mickael_Istria
    Homme Profil pro
    Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Inscrit en
    Juillet 2008
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 469
    Points : 2 997
    Points
    2 997
    Par défaut
    Citation Envoyé par Jackysousou Voir le message
    org.eclipse.swt.SWTError: No more handles
    C'est un fuite de Resource, et ça peut en effet causer un gros freeze de l'application.
    Qu'est-ce qu'une resource? Un object qui étend la classe org.eclipse.swt.graphics.Resource. Ce sont des objets qui sont délégués à l'implémentation native (OS/WS) et dont on ne peut avoir qu'un nombre limité simultanément. Les objects en question sont Font, Color, Image, Path, GC...
    Ces objets doivent être créées avec parcimonie, par exemple en utilisant des caches pour éviter de créer 1000 fois la même chose, et surtout on doit appeler ".dispose()" sur eux dès qu'on en n'a plus besoin (un peu comme s'il n'y avait pas de garbage-collection pour ces objets).

    Pour débugger ça, tu peux commencer par de la revue de code et vérifier que partout où tu as un "new Font()" ou un "new Color()" ou un "new Image()" ou un "new WhateverExtendsResource()", tu auras bien un .dispose() qui sera appelé dessus dès que possible.
    Pour identifier les points critiques, tu peux utiliser Sleak, qui te permet de voir quand tu crées trop de Resources et donc de mieux cibler tes recherches.
    Pour du HTML, CSS, JavaScript, TypeScript, JSon, Yaml, Node... dans Eclipse IDE, installe Eclipse Wild Web Developer
    Pour du Rust dans Eclipse IDE, installe Eclipse Corrosion
    Follow me on twitter

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2013
    Messages : 23
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Merci pour votre réponse.

    Je viens de faire un Heap Dump de l'application.
    Je constate qu'il n'y a pas tellement d'instances des objets Font, Color ou Image. Dans le code, la plupart des instances de ses objets sont statiques. Les dispose() ne sont donc appelés qu'à la fermeture de l'application.

    Je joins les captures du Dump.
    Images attachées Images attachées     

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2013
    Messages : 23
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Après insertion de sleak, je constate effectivement un nombre croissant de Color et Image. Je suis en train de démêler tout ça.

    Je reviendrais vers vous une fois corriger et tester.

    Merci pour le tuyau.

  9. #9
    Membre émérite
    Avatar de Mickael_Istria
    Homme Profil pro
    Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Inscrit en
    Juillet 2008
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 469
    Points : 2 997
    Points
    2 997
    Par défaut
    Citation Envoyé par Jackysousou Voir le message
    Après insertion de sleak, je constate effectivement un nombre croissant de Color et Image. Je suis en train de démêler tout ça.
    Il est possible que l'object soit "Garbage collected" mais que le handler sur la resource soit toujours en place.
    Pour du HTML, CSS, JavaScript, TypeScript, JSon, Yaml, Node... dans Eclipse IDE, installe Eclipse Wild Web Developer
    Pour du Rust dans Eclipse IDE, installe Eclipse Corrosion
    Follow me on twitter

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2013
    Messages : 23
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Il semblerait que le problème soit réglé...

    J'ai cependant une petite question : si deux applications RCP sont lancées en même temps, est ce qu'un pool de Resource est partagé entre elles ou est-ce que chacune à son propre pool ?

    Merci

  11. #11
    Membre émérite
    Avatar de Mickael_Istria
    Homme Profil pro
    Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Inscrit en
    Juillet 2008
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 469
    Points : 2 997
    Points
    2 997
    Par défaut
    En fait, le nombre de ressources et de handlers est limité par l'OS/WS il me semble. Donc au final, c'est partage en bas niveau.

    Cependant, au niveau de SWT, le pool de ressource utilisées n'est pas partagé (et n'est pas censé être partagé) entre 2 applications RCP. Ça veut dire que si tu crées une Color dans une application RCP, tu ne peux à priori pas la réutiliser dans une autre, donc tu dois la re-créer. Apres, peut-être les OS sont malins et arrive à partager les ressources... On peut imaginer un OS avec un nombre de handlers infini qui garde un compteur du nombre de handlers sur les ressources, qui donne la même ressource à différents processus, et dont le dispose() diminuerait juste le nombre de handler de 1, et la ressource est gardée active tant qu'il y a au moins un handler dessus... Mais c'est complètement en dehors des problématiques d'utilisation de SWT. Au niveau d'un développeur SWT, il faut juste appeler dispose(). Si l'OS fait des optimisations, tant mieux, mais on ne doit pas compter dessus lorsqu'on développe.
    http://www.eclipse.org/articles/swt-...-design-2.html
    Pour du HTML, CSS, JavaScript, TypeScript, JSon, Yaml, Node... dans Eclipse IDE, installe Eclipse Wild Web Developer
    Pour du Rust dans Eclipse IDE, installe Eclipse Corrosion
    Follow me on twitter

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2013
    Messages : 23
    Points : 6
    Points
    6
    Par défaut
    C'est noté.

    Merci pour l'aide et les explications.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RCP] Récupérer le chemin du répertoire d'une application RCP
    Par nienor dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 21/03/2007, 09h56
  2. Erreur au lancement d'une application RCP : NoClassDefFound
    Par elitost dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 10/01/2007, 11h00
  3. Qu'est-ce qu'une application RCP ?
    Par bnuitrare dans le forum Eclipse Platform
    Réponses: 9
    Dernier message: 14/09/2006, 09h03
  4. [RCP][plugin] comment creer des plugins pour une application RCP ?
    Par TabrisLeFol dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 20/07/2006, 16h01
  5. [RCP] Devrais-je développer une application RCP ou un plugin ?
    Par arN34 dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 23/09/2004, 17h09

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