我花了近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是不是一个有效的设置?
答案都不到目前为止是正确的,这是如果查询提到的错误在谷歌出现的第一个打击,所以我觉得需要一些澄清。
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
我遇到同样的问题,因为你,但我想出了一个JVM错误报告( http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6354345 )以为蒙上对这个问题的一些情况。 它基本上可以归结为永远不被打算两次加载到同一虚拟机Java代理库。 很烂,但好像它是代理制,你不能在同一时间执行两个基本的限制。
对我来说是同样的问题,因为代码金光闪闪后,他们重复-Xrunjdwp
没有意识到有第二-Xrunjdwp
,因为它是隐藏在变量%JAVA_OPTIONS%
请检查您的应用程序服务器的启动脚本。