Comment ouvrir les ports JMX remote à chaud
• Alexis Hassler
Pour permettre un accès distant au MBeans d’une JVM Oracle ou OpenJDK, il faut la démarrer avec la propriété com.sun.management.jmxremote.port
, plus quelques autres propriétés détaillées sur JTips.
java -Dcom.sun.management.jmxremote.port=1099 fr.sewatech.myapp.MyMain
En rédigeant l’article JTips sur JMX Remote, j’ai découvert qu’on pouvait activer cet accès distant à chaud grâce à l’API Attach. Voyons comment procéder.
L’API Attach est intégrée dans le JDK d’Oracle ou de OpenJDK ; c’est le package com.sun.tools.attach
dans le fichier bin/tools.jar. Cette API permet de se connecter à une JVM locale et d’y démarrer des agents. Pour se connecter, il faut connaître l’ID du process de laJVM :
String pid = "4478";
VirtualMachine vm = VirtualMachine.attach(pid);
On peut aussi en récupérer la description via l’API :
VirtualMachineDescriptor catalina = VirtualMachine.list().stream()
.filter(desc -> desc.displayName().contains("catalina"))
.findFirst().get();
VirtualMachine vm = VirtualMachine.attach(catalina);
Une fois attaché, on peut démarrer un agent en indiquant le chemin pour accéder à son fichier jar, ainsi que ses paramètres. Depuis le JDK 8, on peut aussi plus simplement démarrer l’agent de management local ou distant. C’est cette dernière possibilité qui nous intéresse :
Properties props = new Properties();
props.setProperty("com.sun.management.jmxremote.port", "1099");
vm.startManagementAgent(props);
L’exemple ci-dessus est la version courte. Il est probablement nécessaire d’ajouter les propriétés permettant de gérer l’authentification et le SSL. On peut maintenant connecter nos outils de management, comme JConsole ou VisualVM, en utilisant l’adresse <server-hostname>:1099.
Une fois que l’agent est démarré, on ne peut plus l’arrêter, à ma connaissance du moins, et on ne peut pas le reconfigurer.
L’opération startManagementAgent
est donc irréversible.
Alexis Hassler
J'ai créé la société Sewatech en 2005, pour y exercer mon métier de développeur full stack, à dominante back end.
Vous pouvez me contacter si vous cherchez un développeur indépendant expérimenté (plus de 25 ans d'expérience) pour intégrer votre équipe de projet. Je peux aussi intervenir pour un audit ou une mission de conseil.
Enfin, je donne des formations sur Spring, Vert.x, WildFly,... en intra sur site ou à distance.
Archives
-
- Authentification Digest et chiffrement des mots de passe, avec Tomcat Realm
- Adieu boot2docker, bonjour docker-machine
- Authentification Digest et chiffrement des mots de passe, avec Spring Security
- Découverte de CompletableFuture
- Comment ouvrir les ports JMX remote à chaud
- sewatech.fr sur mobile
- Intégration continue avec Travis CI et Docker Hub
- Putain, 10 ans !
- Charlie Hebdo
- Bilan 2014 du blog
-
- Comment installer OpenVPN sur Google Cloud
- Comment chiffrer les mots de passe de Tomcat
- Démarrer RESTEasy en mode standalone
- Réduire la taille des images Docker
- Construire une image Docker pour WildFly
- Construire une image Docker pour Apache / mod_cluster
- Compiler mod_cluster pour Apache 2.4 : pourquoi et comment ?
- Mon interview sur ma formation WildFly, par Arun Gupta
- Installer un cluster WildFly avec Docker
- WildFly 8, administration guide : le livre
- Devoxx France 2014 : BOFs et à-cotés
- Devoxx France 2014 : Conférences
- Devoxx France 2014 : Keynotes
- Devoxx France 2014 : Universités et Ateliers
- Pub WinDev : mon mail de réponse
- Les nouveautés de WildFly 8
-
- Attention aux parenthèses dans Logback
- Accéder à la console de JBoss AS 7 via Apache Web Server
- JBoss EAP 6 et les bonnes nouvelles
- Construire soi-même JBoss AS 7 (ou WildFly)
- Développeurs JSF, fuyez @ManagedBean
- Tester des beans en scope Conversation avec Arquillian
- Accéder aux composants remote de JBossAS 7
- Présentation Arquillian
-
- Déployer une application JavaEE via l'API Cloudbees
- Les sorties de l'été 2011
- Sorties de l'été 2011, JBoss AS 7
- Versions mineures de JBoss AS
- Sorties de l'été 2011, Java SE 7
- Injection de logger avec Spring
- Injection de logger avec CDI
- Découverte de Cloudbees
- Mots de passe chiffrés pour les datasources de JBoss
- JUnit Runner pour CDI / Weld
- JUnit Rule pour CDI / Weld
- Carte des JUGs en France
-
- DAO ou pas DAO ?
- Devoxx Schedule dans Google Calendar
- Environnement de développement Java EE 6
- Tutoriel JSF, Spring et Hibernate
- Enrichir les logs avec LogWEx
- VirtualBox 64bits sous MacOS X
- Premiers pas avec Git et GitHub
- Déploiement de Silverpeas sur JOnAS
- SLF4J et JCL sous Jonas 5
- Tests unitaires pour Google App Engine
- JRebel avec OpenJDK et Grizzly
- Silverpeas sur JBoss 5
- Script de création de machine virutelle VirtualBox
- Installation de Silverpeas
- Persistance dans Google App Engine : JDO, JPA ou ... ?
- Environnement de développement pour GAE
- Mon projet GAE
- Démarrage du blog