Cela fait environ un mois, très exactement depuis que j'ai basculé sur la cooker pour tester en avance de phase Mandriva 2009.0, que je me retrouve sous Eclipse avec un bug des plus étonnant. Le symptôme est aussi simple qu'agaçant, chaque ouverture de fichier prend en gros 2 secondes... J'ai attendu patiemment la 2009.0 pour voir si le problème serait corrigé, mais rien à faire. Je me suis alors enfin décidé à chercher comme un grand et j'ai enfin mis la doigt sur le problème. Tout est la faute... de l'imprimante...
J'ai d'abord cru à un CPU emballé mais oprofiler ne m'a pas donné raison. Aucun processus ne semble particulièrement occuper le CPU, ce qui est confirmé par un bête ntop.
Noter au passage que pour utiliser oprofiler de manière optimum, ce dernier a besoin de votre noyau sous sa forme non-compressée (vmlinux et non pas vmlinuz). Ne cherchez pas un moyen de décompresser votre /boot/vmlinuz en l'autre, cela n'existe pas. En fait vmlinuz est un peu comme ces exécutables compressés, une première partie contient le code du décompresseur et la seconde les données. la seul solution est d'aller dans les sources du kernel et de lancer un simple make vmlinux. Le fichier est alors compilé dans le dossier arch/x86.
La seconde possibilité est une latence, ou un timeout. Du coup je me lance sur un strace eclipse 2> logs pour afficher en temps réels les appels systèmes effectués par Eclipse. Dans une autre console je lance un tail -f log. Vu le volume d'informations, je suis rapidement passé à quelque chose de la forme tail -f /home/yoran/t | grep -v timeofday | grep -v poll | grep -v "read(3" | grep -v select | grep -v writev | grep -v futex. Du coup, beaucoup moins d'informations. J'ouvre alors un fichier et je regarde ce qui se passe.
Dans les traces, je vois clairement que le coco cherche à se connecter au réseau, bizarre pour une simple ouverture de fichier. Il établit une connexion avec mon serveur et échange des informations.
Du coup, j'arrêtes strace et je lance wireshark.
WireShark est un indispensable outil de monitoring réseau, il permet ainsi de capturer toutes les informations qui circulent. Il vaut mieux du coup fermer les applications "communicantes", histoire de ne pas être paumé dans un flot de données. Ceci fait, lancement d'Eclipse et observant lors de l'ouverture de ce maudit fichier...
Là c'est confirmé, une connexion est bien ouverte sur le serveur, suivi d'une série de transaction, sur le port 631, c'est à dire celui de... cups...
Un peu surpris tout de même... Pour information, notre imprimante est déportée prés du serveur dans une autre pièce et nous imprimons donc via le réseau. Il y a un donc bien un service CUPS sur le serveur et juste les librairies en local.
Nouvelle observation des traces un peu avant la fameuse connexion au serveur, et là je me rend compte que lors de cette fameuse ouverture de fichier, Eclipse (ou une librairie partagée) va lire le fichier de configuration cups (/etc/cups/client.conf). Il y trouve mon serveur distante et va lui causer... Incompréhensible... Notez que j'ai refais le même test avec un utilisateur bidon, sur un compte totalement vierge, avec un eclipse tout frais sur une JVM SUN, rien n'y a fait, même résultat...
J'ai tout essayé et le seule moyen que j'ai trouvé est de déplacer /etc/cups, lancer eclipse, et remettre le dossier cups à sa place. De toute beauté...
Ce problème et sa solution ne va sûrement pas toucher grand monde, mais peut-être que la "démarche" peut intéresser ceux qui se trouvent face à cette famille de bug systémiques et vicieux. Le genre de bugs qui laisse google sans voix, jusqu'au moment où l'on a la solution et qu'on lui demande eclipse cups... No comments, ça me rappelle le codage de la bible cette histoire...
- répondre
Anonymous , le 9 November, 2008 - 23:24Vous avez ouvert un rapport de bug ?
- répondre
Anonymous , le 9 November, 2008 - 23:40Une chtite faute dans la conclusion :
ceux qui se trouveNT
- répondre
Ulhume, le 10 November, 2008 - 01:18@Anonymous Le problème est que même si j'ai la solution, je n'en ai pas la cause, donc à quoi soumettre ? A Mandriva ? A Gnome ? à CUPS ?
- répondre
Ulhume, le 10 November, 2008 - 01:18@Anonymous bis - merci, corrigé
- répondre
Zanko, le 10 November, 2008 - 15:36Mort de rire.
Enfin bon, vu les perfs d'eclipse c'est pas comme si on était à 2 secondes près...
- répondre
Ulhume, le 10 November, 2008 - 15:46@Zanko Je dis pas le contraire, les perfs d'eclipse ne sont pas extraordinaire. En revanche une chose est sûre, il n'y a pas un seul EDI libre qui lui arrive à la cheville. Et dans les non-libre, les concurrents sont assez rares.
- répondre
Daniel, le 10 November, 2008 - 20:29Juste une remarque, quand il y a plein de grep -v à enchaîner, on peut utiliser egrep (pas sûr que l'on gagne beaucoup en perf), mais je trouve sed plus pratique.
Ça revient à remplacer
tail -f /home/yoran/t | grep -v timeofday | grep -v poll | grep -v "read(3" | grep -v select | grep -v writev | grep -v futex
par
tail -f /home/yoran/t | egrep -v '(timeofday|poll|read\(3|select|writev|futex)
ou
tail -f /home/yoran/t | sed '/timeofday/d;/poll/d;/read(3/d;/select/d;/writev/d;/futex/d;'
- répondre
Akrew, le 21 November, 2008 - 04:12un conseil si le fichier est gros et que vous n'avez pas besoin d'expressions regulieres : fgrep est de loin beaucoup plus rapide
@Vincent tu es parti au Demo Camps ?
- répondre
Ulhume, le 10 November, 2008 - 20:33Techniquement je te suis à 200% !!
Maintenant lorsque l'on est en train de s'énerver à filtrer ce genre de bazaar, j'avoue que le faire avec "style" me touche moins
PS: pour le sed, c'est un peu too much tout de même
- répondre
Ulhume, le 10 November, 2008 - 22:43Au passage, l'accélération magique semble aussi affecter gedit...
- répondre
Vincent , le 11 November, 2008 - 20:53Une petite info à propose d'Eclipse : http://wiki.eclipse.org/Eclipse_DemoCamps_November_2008/Paris
Venez nombreux
Profitez de cet évènement Eclipse pour montrer ce que vous faites avec Eclipse ou pour voir ce que les autres font !
Poster un nouveau commentaire