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

Orientée colonnes ?

Les bases NoSQL sont arrivées avec leur cortège de nouveautés et pour certaines d'entre elles une notion héritée de BigTable : celle de base de donnée orientée colonne. Cependant faire le lien entre l'article de Wikipedia et comprendre ce que permet réellement un base de donnée comme HBase n'est pas une chose évidente. En effet le simple fait de définir cette notion ne suffit pas toujours a bien comprendre quels sont les principes de conception du monde SQL qui peuvent être oubliés et ceux qui doivent être appris. Colonne or not colonne ? Prenons un modèle très simple de donnée et essayons de le transposer dans un modèle "orienté colonne": Comme on peut le voir on est passé d'un modèle à 2 dimensions (ligne x colonne) vers un modèle où une valeur est accédée au travers de 2  coordonnées qui sont ici (ligne, colonne) Cette notion de coordonnées est  importante  (c'est pour ça que je la met en gras 2 fois de suite) si l'on veut c

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.

HBase + Subversion + Eclipse + Windows

HBase + Subversion + Eclipse + Windows (it should be easy to adapt for Linux) Update : please note that since HBase-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