Skip to main content

TPTP Architecture, l'Agent Controller and co

N.B. : Les informations présentées ici ne sont valables qu'à partir de la version 5.0 de Java

Suite à un premier billet sur le mise en place de l'Agent Controller du projet TPTP en voici un autre pour décrire un peu plus précisément son architecture. Au premier abord il n'est en effet pas évident de s'y retrouver entre les éléments mis en jeu.

Vue d'ensemble de l'architecture

L'architecture de TPTP est organisée autour de 3 éléments :
  • L'Agent : il s'agit d'un programme qui s’exécute dans le même processus que la JVM. Il est notifié des évènements internes au travers de la JVM Tool Interface (JVMTI). JVMTI est une interface qui permet de connaître l'état de la JVM et de contrôler de manière avancée l'exécution des applications Java qui y sont exécutées.
  • L'Agent Controller : Il s'agit d'un programme qui doit résider sur la même machine que la JVM. Il gère tout le processus de démarrage et de communication avec l'agent. Il fait office de médiateur entre les agents et les clients.
  • Le Client : Dans le cadre de TPTP il s'agit en général de l'IDE Eclipse. Il collecte les données au travers de l'Agent Controller, cependant il n'est pas nécessaire que les 2 résident sur la même machine.


Quelques règles :
  • Un Client peut se connecter à un ou plusieurs Agent Controllers
  • Un Agent Controller peut servir zéro ou plusieurs Clients
  • Un Agent peut servir zéro ou plusieurs Clients
  • Un Client, au travers de l'Agent Controller, peut interagir avec zéro ou plusieurs Agents
  • Un Agent Controller peut contrôler zéro ou plusieurs Agents mais un Agent ne peut être connecté qu'à un seul Agent Controller.
Invocation d'un Agent au sein de la JVM
  Généralités
Les agents sont chargés au démarrage de la JVM grace à l'option suivante :
 -agentlib:<agent-lib-name>=<options>
Ce qui suit -agentlib: est le nom de la bibliothèque à charger. La recherche de cette bibliothèque est dépendante du système d'exploitation que vous utilisez. Elle doit être dans un chemin cité dans la variable d'environnement PATH sous Windows ou LD_LIBRARY_PATH sous Unix.
Par exemple si l'option -agentlib:foo=opt1,opt2 est spécifiée alors la JVM tentera de charger la bibliothèque foo.dll à partir d'un répertoire se trouvant dans la variable d’environnement PATH sous Windows ou bien libfoo.so dans la variable LD_LIBRARY_PATH sous Linux ou Solaris.

  Charger l'agent de TPTP
Je reviendrai plus en détail sur l'agent mis à disposition par le projet TPTP mais voici à quoi va ressembler l'option qui va permettre son chargement : 

-agentlib:JPIBootLoader=JPIAgent[:[help]|[<option>=<value>,...]];<profiler>[:<option>=<value>,...]

        Exemple :
 -agentlib:JPIBootLoader=JPIAgent:server=standalone;CGProf
  • JPIBootLoader : C'est la bibliothèque qui va charger l'agent
  • JPIAgent : C'est l'agent pour les version 5 et 6 de Java.
  • profiler : Charge une bibliothèque spécialisée dans un type  de "profiling" donnée, CGProf permet par exemple de surveiller les temps d’exécution.
La fin de la ligne est composée d'options sur lesquels je reviendrai en détail plus tard....

Comments

  1. Bonjour,

    Article très intéressant. Juste une question : il faut démarrer l'agent à la main, l'agent controller ne permet pas de lancer l'agent de facon distance?
    Merci.

    ReplyDelete

Post a Comment

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…

HBase + Subversion + Eclipse + Windows

HBase + Subversion + Eclipse + Windows (it should be easy to adapt for Linux)

Update : please note that sinceHBase-4336 / HBase 0.96 the source tree is split in more than one Maven module this post is no more relevant, i have created a new post on this subject : http://michaelmorello.blogspot.fr/2012/06/hbase-096-eclipse-maven.html
This is a simple setup in order to play with the source code of HBase under Microsoft Windows.
Since HBase use some Unix specific commands like chmod the only requirements here are Cygwin and a working Maven 3 environment. (It is obvious that you need Java and Eclipse, but you DON'T need anything else like the Eclipse Maven plugin or any SSH configuration)

1. Checkout the source code

The first step is to check out the source code from the Subversion repository. I did it under my cygwin home repository. In this example i want to play with the 0.90 branch :

svn co http://svn.apache.org/repos/asf/hbase/branches/0.90/ hbase-0.90

2. Generate the Eclipse configura…

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…