Question

J'ai passé les 4 dernières heures à essayer de mettre en place la mémoire Eclipse TPTP le profilage sur une instance Tomcat qui doit être exécuté à distance (à savoir pas Éclipse). Cela devrait être possible selon le TPTP et l'agent docs du contrôleur.

J'ai installé les composants TPTP (4.6.0) dans mon Eclipse (Galileo) Etabli, avec le contrôleur Agent selon la instructions sur le site. Pour activer l'agent, j'ai ajouté le options suivantes à la ligne de commande qui démarre l'instance Tomcat:

-agentlib:JPIBootLoader=JPIAgent:server=enabled;HeapProf:allocsites=true

et ajouté les répertoires suivants à l'avant du chemin:

D:\dev\tools\ac\plugins\org.eclipse.tptp.javaprofiler
D:\dev\tools\ac\bin

Lorsque vous tentez de démarrer Tomcat je toujours obtenu l'erreur suivante message:

ERROR: JDWP unable to get necessary JVMTI capabilities. ["debugInit.c",L279]

Je l'ai fait beaucoup de recherche sur Google, mais rien trouvé pertinent; j'ai essayé réinstallant versions TPTP et divers de l'Agent Controller.

En fin de compte le problème avéré être que je commençais Tomcat avec l'option "jpda", ce qui se traduit par catalina.bat

-Xdebug -Xrunjdwp:transport=.....

Suppression de l'argument de commande « jpda » causé JVMTI pour commencer à travailler.

, la question est: je ne trouvais rien au cours d'une de mes recherches à indiquent qu'un agent JVMTI est incompatible avec le débogage. Pouvez quelqu'un expliquer ce qui se passe et pourquoi JVMTI + JDWP est pas valide configuration?

Était-ce utile?

La solution

Aucune des réponses à ce jour sont corrects, ce qui est le premier coup qui vient sur Google si vous interrogez l'erreur mentionné, alors je me sens une certaine clarification est nécessaire.

JVMTI et JDWP ne travailler ensemble, en fait, ils doivent généralement être utilisés ensemble. Vous obtiendrez ERROR: JDWP unable to get necessary JVMTI capabilities si -Xrunjdwp (et / ou éventuellement -agentlib:jdwp) est spécifié plus d'une fois sur la ligne de commande. Pour résoudre ce problème, assurez-vous que vous avez seulement l'un des -Xrunjdwp ou -agentlib:jdwp dans votre ligne de commande.

Pour plus de détails, lisez la suite ...

JVMTI (Java Virtual Machine Interface Tool) est le successeur de JVMDI (Java Virtual Machine Interface de débogage) et JVMPI (Java Virtual Machine Interface de profilage). Il intègre la fonctionnalité des deux JVMDI et JVMPI, qui étaient tous deux en Java 5 dépréciée et supprimé en Java 6. Il est l'API qui expose les entrailles de la machine virtuelle Java pour les fins de débogage et de profilage.

JDWP (Java Debug Wire Protocol) est un protocole qui décrit un mécanisme simple pour transmettre des commandes et des réponses. Pour autant que je sache, il est le seul moyen pour un débogueur assis à l'extérieur de la machine virtuelle Java pour communiquer avec elle et à l'interface avec le JVMTI.

JDI (Java débogueur Interface) est une API côté client (débogueur côté) qui expose une partie des caractéristiques de JVMTI tout en faisant usage de JDWP plus ou moins transparente.

Le bug mentionné dans Bob Dobbs de réponse concerne le message d'erreur trompeur, et le fait que la machine virtuelle Java essaiera de charger JDWP une fois pour chaque fois qu'il est spécifié sur la ligne de commande. Il ne dit nulle part que JDWP et JVMTI ne peuvent pas être utilisés ensemble.

Plus d'infos ici: https://www.ibm.com /support/knowledgecenter/ssw_ibm_i_74/rzaha/jpdebuga.htm

Autres conseils

Je suis tombé sur le même problème que vous, mais je suis venu avec un rapport de bogue JVM ( http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6354345 ) qui jettent un peu de lumière sur la question. Il se résume à la bibliothèque de l'agent Java ne jamais être destiné à être chargé deux fois dans la même machine virtuelle. Sucks, mais il semble que c'est la limitation de base du système d'agent que vous ne pouvez pas faire les deux en même temps.

Pour moi, ce fut la même question que le code postal bling, ils étaient en double -Xrunjdwp ne savait pas qu'il y avait une deuxième -Xrunjdwp comme il a été caché dans la %JAVA_OPTIONS% variables, vérifiez votre script de démarrage du serveur d'applications.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top