Pergunta

Passei os últimos 4 horas tentando configurar o Eclipse TPTP memória criação de perfis em um Tomcat instância que deve ser executado remotamente (por exemplo,não Eclipse).Isso deve ser possível, de acordo com o TPTP e Agente de Controlador de docs.

Eu instalei o TPTP componentes (4.6.0) no meu Eclipse (Galileu) bancada de trabalho, juntamente com o Agente Controlador de acordo com o instruções no site.Para permitir que o agente, adicionei o seguintes opções da linha de comando que inicia o Tomcat exemplo:

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

e acrescentou os seguintes diretórios para a frente o CAMINHO:

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

Quando tentar iniciar o Tomcat eu sempre tenho o seguinte erro mensagem:

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

Eu fiz um monte de pesquisa no google, mas não encontrei nada relevante;Eu tentei reinstalar o TPTP e várias versões de Agente Controlador.

No final, o problema acabou por ser o que eu estava iniciando o Tomcat com o "acdp" opção, que catalina.morcego se traduz em

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

Removendo o "acdp" argumento de comando causado JVMTI para começar a trabalhar.

ASSIM, a pergunta é:Eu não achei nada durante minhas pesquisas para indicar que um agente JVMTI é incompatível com a depuração.Pode alguém explica o que está acontecendo e por que JVMTI + JDWP não é válido o programa de configuração?

Foi útil?

Solução

Nenhuma das respostas está correta e este é o primeiro resultado que aparece no Google, se você consulta o erro mencionado, para que eu sinta algum esclarecimento é necessário.

JVMTI e JDWP fazer trabalhar em conjunto, na verdade, eles geralmente deve ser usado em conjunto.Você vai ficar ERROR: JDWP unable to get necessary JVMTI capabilities se -Xrunjdwp (e/ou, eventualmente, -agentlib:jdwp) é especificado mais de uma vez na linha de comando.Para corrigir isso, certifique-se de que você só tem um -Xrunjdwp ou -agentlib:jdwp na linha de comando.

Para mais detalhes, leia...

JVMTI (Java Virtual Machine Tool Interface) é o sucessor do JVMDI (Java Virtual Machine Interface de Depuração) e JVMPI (Java Virtual Machine Interface de criação de perfil).Ele incorpora a funcionalidade de ambos JVMDI e JVMPI, ambos os quais foram preteridos no Java 5 e removido no Java 6.É a API que expõe os internos da JVM para fins de depuração e profiling.

JDWP (Java Debug Wire Protocol) é um protocolo que descreve um mecanismo simples para a transmissão de comandos e respostas.Até onde eu sei, ele é o único caminho para um depurador sentada do lado de fora da JVM para se comunicar com ele e a interface com o JVMTI.

A JDI (Java Interface de Debugger) é um do lado do cliente (o depurador do lado) API que expõe algumas das características do JVMTI ao fazer uso de JDWP mais ou menos transparente.

O erro mencionado em Bob Dobbs a resposta de preocupações a mensagem de erro enganosas, e o fato de que a JVM irá tentar carregar JDWP uma vez para cada vez que é especificado na linha de comando.Ele não estado em qualquer lugar que JDWP e JVMTI não podem ser usados juntos.

Mais informações aqui: https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_74/rzaha/jpdebuga.htm

Outras dicas

Eu encontrei o mesmo problema que você, mas criei um relatório de bug da JVM (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6354345) Isso lançou alguma luz sobre o assunto. Basicamente, se resume à biblioteca do agente Java, nunca pretendendo ser carregado duas vezes na mesma VM. É uma merda, mas parece que é uma limitação básica do sistema de agentes que você não pode fazer as duas coisas ao mesmo tempo.

Para mim, foi o mesmo problema que o Code Bling Post, eles foram duplicados -Xrunjdwp não percebi que havia um segundo -Xrunjdwp como estava escondido na variável %JAVA_OPTIONS%, verifique o script inicial do seu servidor de aplicativos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top