J'utilise les paramètres JVM suivants pour démarrer une machine virtuelle Java avec le débogueur hostpot.Identifier Java jdwp Port affecté au débogueur (Ephemeral)
-Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=0
Notez que je suis le port zéro assigne, de sorte que la machine virtuelle Java demande au système d'exploitation pour un port éphémère. Ceci est critique pour mon cas d'utilisation, pour m'assurer que la JVM ne manquera pas de démarrer en raison de la contention d'un port prédéfini.
En conséquence ma machine virtuelle démarre en place, et l'entrée du journal suivant est émis à stdout
:
Listening for transport dt_socket at address: XXXX
Je voudrais trouver un moyen d'identifier le port de débogage à l'intérieur ou à l'extérieur de la machine virtuelle Java, il serait donc possible pour moi de l'enregistrer dans un serveur de gestion d'état.
Quelles options sont disponibles pour ce cas d'utilisation? Je l'ai considéré ce qui suit, avec peu de joie:
- JMX Connecteur - Se connecter en utilisant JConsole au processus, trouver des détails qui MBean quel port est utilisé. Cependant, je ne peux pas trouver un tel MBean
- Registre RMI - Est-il possible que l'agent de débogage s'enregistre lui-même dans un registre RMI? Je n'ai trouvé aucune preuve que cela pourrait fonctionner.
- Agent Java - Spécifie un agent JVM qui pourrait intercepter certains aspects du débogueur et obtenir les détails du port, encore une fois aucune preuve pour soutenir la faisabilité de cette idée.
Exécutez un programme pour affecter le port et relâchez-le au lieu de passer 0 ici. C'est ainsi que fonctionne le plugin build-helper-maven-plugin. – bmargulies
@bmargulies - Cela suppose qu'aucun autre processus n'ouvre le même numéro de port entre le wrapper qui le ferme et l'application qui l'ouvre.Cela me fait me sentir un peu mal à l'aise dans une application de production. – jwa