Publié par
Il y a 4 années · 3 minutes · Divers, Events, Java / JEE

JCrete 2013 – Your Profiler is Lying to you

java-specialists.jpg

Lors de la deuxième journée de JCrete 2013, Kirk Pepperdine nous a proposé une session dédiée aux mensonges de nos profilers.

Cette session était motivée par la présence d’experts en performances et aussi pour tordre le cou à certaines idées reçues encore appliquées. Ces dernières sont appelées "Tuning by folklore" et consistent en l’application d’astuces dont la seule justification est "j’ai lu quelque part que c’était bien".

Pour avoir des résultats corrects, il faut au moins avoir une plateforme similaire à la production, le bon profiler et les bons réglages de ce dernier. Et encore, cela ne suffit pas toujours car nos profilers sont des éternels insatisfaits. Ils trouveront toujours quelques problèmes à signaler en rouge dans une belle interface.

Comment pouvons-nous nous assurer que ces points sont réellement importants ?

Kirk explique avoir utilisé cinq profilers différents sur une application à problèmes. Sur les cinq, seuls deux ont trouvé le problème majeur, les trois autres ont relevé d’autres points moins importants.

Il faut être extrêmement critique vis-à-vis des résultats fournis par nos outils. La meilleure approche consiste d’ailleurs à savoir ce que l’on recherche avant de démarrer un profiler. Pour cela, il faut observer le comportement du système pour savoir quel outil utiliser. Par exemple, si le principal problème semble venir de la mémoire, il est inutile de démarrer un lock profiler, même si l’application souffre (dans une moindre mesure) de problèmes de locks.

La discussion s’oriente ensuite vers les safepoints, qui sont le mécanisme utilisé par Hotspot pour tout un tas d’opération (passage du GC, stratégies de locking, optimisation et désoptimisation du code, …). Martin Thompson explique que le code est parsemé de safepoints par le compilateur de sorte que chaque thread demande régulièrement à la JVM s’il doit s’interrompre.

Problème : personne ne sait réellement à quels endroits ces safepoints sont introduits. Il est d’ailleurs possible d’écrire une boucle infinie qui n’a pas de safepoints. Dans ce cas de figure, le thread qui exécute la boucle ne s’interrompra jamais, le GC ne passera donc jamais et cela pourra amener un freeze complet de la JVM.

Autre problème : les profilers qui utilisent le sampling sont également basés sur ces safepoints. Il est donc tout à fait possible de manquer les événements majeurs du système car tous les threads ne sont pas encore interrompus au moment où il se déclenche.

Enfin, les profilers génèrent des objets temporaires dans nos applications pour pouvoir fonctionner et créent donc artificiellement du travail pour le GC. Leur seule présence peut donc causer (et bien sûr indiquer) un problème mémoire.

Pour finir cette discussion de très haut niveau, nous avons été amenés à réfléchir sur la pertinence de l’hypothèse générationnelle faible (Weak Generational Hypothesis). Cette hypothèse pose les bases des algorithmes de GC actuels et dit que la plupart des objets meurent jeunes. Avec l’arrivée des caches de plus en plus volumineux, cette hypothèse est de moins en moins valide. Il faudra donc à terme revoir ces algorithmes pour s’y adapter.

Pierre Laporte

Pierre est un touche-à-tout chez Xebia qui aime relever tous types de challenges.

Des problématiques d’architecture aux tests de charge en passant par la gestion de dette technique ou encore les applications mobiles, c’est poussé par cette volonté d’apprendre qu’il oeuvre aujourd’hui chez Xebia. Il aime faire du code propre et expressif, apprécie le travail d’équipe et se concentre avant tout sur le service rendu à l’utilisateur final.

2 thoughts on “JCrete 2013 – Your Profiler is Lying to you”

  1. Publié par Antonio, Il y a 4 années

    On peut avoir les noms des 2 profilers qui ont trouvé le problème majeur ?

  2. Publié par Pierre Laporte, Il y a 4 années

    Je n’ai pas les noms des deux profilers qui ont trouvé le problème utilisé dans l’expérience.

    En fait, ce n’est pas important. L’idée principale est que tout profiler va mentir à un moment donné et il faut être capable de détecter ces mensonges. Il n’y en a pas un qui donne une garantie « zéro mensonges ».

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *