Java的JVMTI不一起-Xdebug -Xrunjdwp工作(Java JVMTI doesn&

2019-07-23 10:19发布

我花了近4小时试图设置Eclipse TPTP内存分析上必须远程运行(即不是在Eclipse)一个Tomcat实例。 这应该根据TPTP和代理控制器文档成为可能。

我安装了TPTP组件(4.6.0)到我的Eclipse(伽利略)的工作台上根据网站上的说明代理控制器一起。 要启用代理,我添加下列选项到启动Tomcat实例的命令行:

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

并增加了以下目录路径的前面:

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

当试图启动Tomcat我一直有以下错误信息:

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

我做了很多的谷歌搜索,但没有发现任何有关; 我尝试重新安装TPTP和代理控制器的各种版本。

最终的问题竟然是,我是用“JPDA”选项,这catalina.bat中转化为启动Tomcat

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

卸下“JPDA”命令的参数引起的JVMTI开始工作。

所以,问题是:我什么也没发现任何在我的搜索,以表明一个JVMTI代理与调试不兼容。 一个人能解释这是怎么回事,为什么JVMTI + JDWP是不是一个有效的设置?

Answer 1:

答案都不到目前为止是正确的,这是如果查询提到的错误在谷歌出现的第一个打击,所以我觉得需要一些澄清。

JVMTI和JDWP一起工作,实际上他们通常必须一起使用。 您将获得ERROR: JDWP unable to get necessary JVMTI capabilities ,如果-Xrunjdwp (和/或可能-agentlib:jdwp )被指定不止一次在命令行上。 为了解决这个问题,请确保你只有一个-Xrunjdwp-agentlib:jdwp在命令行中。

有关详细信息,请阅读...

JVMTI(Java虚拟机工具接口)的前身是JVMDI(Java虚拟机调试接口)和JVMPI(Java虚拟机分析接口)。 它包含两个JVMDI和JVMPI,两者中不提倡使用Java 5中和在Java中除去6是暴露该JVM的内部用于调试和分析的目的,API的功能。

JDWP(爪哇调试线协议)是描述用于发送命令和响应的简单机制的协议。 据我所知,它是调试坐在外面JVM与它沟通,并与JVMTI接口的唯一途径。

JDI(Java调试接口)是一个客户端(调试器侧)API暴露一些JVMTI的同时利用JDWP的更多或更少的透明的特性。

该漏洞在鲍勃·多布斯的答复中提到涉及误导性的错误消息,而事实上,JVM将尽力为它是在命令行上指定每次加载一次JDWP。 它没有任何地方指出JDWP和JVMTI不能一起使用。

更多资讯: http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/rzaha/jpdebuga.htm



Answer 2:

我遇到同样的问题,因为你,但我想出了一个JVM错误报告( http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6354345 )以为蒙上对这个问题的一些情况。 它基本上可以归结为永远不被打算两次加载到同一虚拟机Java代理库。 很烂,但好像它是代理制,你不能在同一时间执行两个基本的限制。



Answer 3:

对我来说是同样的问题,因为代码金光闪闪后,他们重复-Xrunjdwp没有意识到有第二-Xrunjdwp ,因为它是隐藏在变量%JAVA_OPTIONS%请检查您的应用程序服务器的启动脚本。



文章来源: Java JVMTI doesn't work alongside -Xdebug -Xrunjdwp