Skip to main content

Eclipse TPTP : Installation de l'Agent Controller

C'est en général une fois l'application développée que les questions de performance surgissent : temps de traitement et de réponse en dessous des espérances ou encore consommation mémoire élevée avec un "garbage collector" qui peine à faire son travail sans trop pénaliser l'applicatif. La complexité des piles Java actuelles n'aidant pas forcément à y voir plus clair on peut se retrouver vite désarmé lorsqu'il s'agit d'expliquer une consommation inhabituelle des ressources ou des temps d'attente anormaux.

Ayant fait face à plusieurs reprises à ce genre de situations j'ai décidé d'écrire une série de billets sur la recherche  et la détection de ces "goulots" qui pénalisent les performances d'un application.

Avant de pouvoir profiter pleinement des possibilités offertes par TPTP ce billet a pour objectif de présenter comment installer de manière propre l'Agent Controller (appelé AC par la suite).
L'Agent Controller c'est un programme chargé de collecter et de redistribuer localement ou à des clients distants des informations sur l’exécution d'un programme Java, mais comme nous le verrons dans les autres billets c'est aussi un ensemble de bibliothèques qui vont nous permettre d'instrumenter en profondeur une machine virtuelle Java.

Note : Ce billet concerne pour le moment uniquement Windows car d'expérience je sais que c'est la plateforme la plus utilisée lors des développements, je la compléterai plus tard avec une version Linux.

Pourquoi installer proprement l'Agent Controller ?

Car c'est la manière la plus simple de tirer pleinement profit des outils de "profiling" du projet Eclipse TPTP :
  • Le profiling de l'application en direct et en local depuis l'IDE Eclipse
  • Le profiling de l'application à distance et en direct
  • Le profiling de l'application en local, ou à distance, et en "différé", extrêmement utile pour optimiser les informations collectées et ne pas saturer l'interface d'Eclipse.
  • L'utilisation du "ProbeKit" qui va permettre d'instrumenter la JVM afin de faire du débogage de manière très avancé dans presque n'importe quelle portion du code exécuté ou pour les plus curieux de faire du "reverse-enginnering"
Tous ces points seront décrits dans des prochains billets.

Etape 1 : Télécharger l'Agent Controller

La page d'accueil du projet TPTP est http://www.eclipse.org/tptp/
A l'heure où ce billet est écrit c'est la version 4.7.1 du projet TPTP qui est en téléchargement. Pour télécharger l'Agent Controller rendez vous sur la page http://www.eclipse.org/tptp/home/downloads/?ver=4.7.1#agentController et choisissez le runtime pour votre plateforme.

Etape 2 : Dézipper l'archive et configurer l'agent

Dézippez l'archive avec l'utilitaire de votre choix (comme 7zip). Évitez autant que possible les chemins avec des espaces ! Pour ma part j'ai copié l'archive zip dans le répertoire C:\dev\tptp\agntctrl :

Il faut maintenant configurer un minimum l'Agent Controller pour qu'il sache ce qu'il a le droit de faire. Pour cela lancer le programme SetConfig.bat qui doit se trouver à la racine du répertoire dans lequel vous avez extrait l'archive :


Vous devez répondre à trois questions :

  1. Donner le chemin complet vers le programme javaw.exe qui est dans le répertoire bin de votre JRE. (note : j'utilise ici une JVM 1.6)
  2. Depuis quelle machine peut-t-on se connecter à l'Agent Controller ? Je vous conseille de répondre ALL, c'est le plus simple pour pouvoir faire plus tard du profiling à distance, si vous démarrez et arrêtez l'Agent Controller manuellement cela ne doit pas poser de problème de sécurité.
  3. Activer la sécurité ? Encore une fois si vous démarrez l'agent à la main de manière occasionnelle il n'est pas nécessaire d'activer la sécurité.


Etape 3 : Configurer l'environnement de Windows
Il est maintenant impératif de placer certains répertoires dans la variable d’environnement PATH de Windows :
  • Pour faire les choses proprement on commence par définir la variable TPTP_AC_HOME en lui attribuant comme valeur le chemin dans lequel on a "dézippé" l'archive contenant l'Agent Controller, dans mon cas ce sera donc C:\dev\tptp\agntctrl :

  • Cherchez maintenant la variable Path, cliquer sur modifier et insérer au début du champ "Valeur de la variable :" la chaîne suivante :
%TPTP_AC_HOME%\plugins\org.eclipse.tptp.javaprofiler;%TPTP_AC_HOME%\bin;%TPTP_AC_HOME%\plugins\org.eclipse.hyades.probekit\lib;

Le point virgule à la fin est important ! Il permet de séparer les différents chemins et est donc indispensable.

Etape 4 : Tester la configuration

  1. Ouvrir 2 terminaux de commande Windows : Démarrer -> Exécuter... -> cmd -> Entrée
  2. Dans les 2 terminaux se positionner dans le répertoire %TPTP_AC_HOME%\bin
  3. Dans le premier taper la commande ACServer.exe
  4. Dans le deuxième taper SampleClient.exe

La commande lancée en bas permet de valider le bon fonctionnement de l'agent en local
Note importante pour ceux qui utilisent Windows Vista :
ACServer.exe nécessite des droits d'administrateurs. Pour cela, dans l'explorateur Windows, faire un clique droit sur ACServer et sélectionner  "Properties".  Dans l'onglet "Compatibility", sélectionner la boite à cocher nommée "Run As Administrator" et cliquer sur  Apply.

Vous pouvez aussi tester un Agent Controller sur une machine distante en lui passant en argument le nom ou l'adresse IP de l’hôte qui l'héberge suivi du numéro de port (par défaut celui ci est 10006)


Conclusion

Ce travail peut paraître fastidieux mais il va nous permettre dans les billets suivants de jouer pleinement et de manière optimisé avec TPTP.

Comments

Popular posts from this blog

Row Count : HBase Aggregation example

With the coprocessors HBase 0.92 introduces a new way to process data directly on a region server. As a user this is definitively a very exciting feature : now you can easily define your own distributed data services.

This post is not intended to help you how to define them (i highly recommend you to watch this presentation if you want to do so) but to quickly presents the new aggregation service shipped with HBase 0.92 that is built upon the endpoint coprocessor framework.

1. Enable AggregationClient coprocessor

You have two choices :

You can enable aggregation coprocessor on all your tables by adding the following lines to hbase-site.xml :
<property> <name>hbase.coprocessor.user.region.classes</name> <value>org.apache.hadoop.hbase.coprocessor.AggregateImplementation</value> </property> or ...you can enable coprocessor only on a table throught the HBase shell :

1. disable the table
hbase> disable 'mytable'

2. add the coprocessor
hbase…

Analyse d'un "thread dump" d'une JVM IBM sous AIX

Dans quels cas le thread dump est utile ?
Le thread dump est un instantané de l'activité des threads de la JVM. Leur analyse est intéressante dans les cas où l'activité de la JVM ne semble pas normale :
Activité suspendue (deadlock/interblocage) ou partiellement suspendue (starvation/famine)Activité existante mais le "débit" est en deçà de ce qui est attendu (Goulot d'étranglement / Bottleneck)Activité existante mais le "débit" reste nul (Boucle infinie / Infinite Loop)Comment avoir un thread dump ?
Nous nous limitons ici à la machine virtuel IBM sous AIX. Dans ce cas là il est extrêmement simple de déclencher la création d'un thread dump : il suffit de faire un kill -3 sur le processus Java.

Un fichier dont le nom est javacore.[date].[numero_processus].[compteur].txt est produit. Sur la sortie standard du processus vous devriez voir la ligne suivante s'afficher :
JVMDUMP010I Java Dump written to .....
En général le dump est produit dans le réper…

Zookeeper, Netflix Curator and ACLs

If you have one or more Zookeeper "multi-tenant" clusters you may want to protect znodes against unwanted modifications.
Here is a very simple and short introduction to the ACL and custom authentication features.
This post is not intended to give you best practices about security and Zookeeper, the only goal is to give you a complete example of a custom authentication handler.
Complete source code with JUnit test is available here :
https://github.com/barkbay/zookeeper-acl-sample/ Use case Let say that your Zookeeper cluster is used by several users. In order to restrict user actions you have decided that each user must prefix all paths with the first letter of his name.
User foo is only allowed to create, read, delete and update znodes under the /f znode. User bar is only allowed to create, read, delete and update znodes under the /b znode.
Get client authentication data on the server side Zookeeper client authentication can be easily customized , all you have to do is to…