Solução de problemas na implantação do agente SkyWalking em projetos Spring Boot

Ao integrar o agente Apache SkyWalking em uma aplicação Spring Boot, alguns problemas podem surgir. Este artigo detalha as dificuldades comuns encontradas e suas respectivas soluções.

Problema 1: Erros de injeção de código do agente

Ao iniciar um projeto Spring Boot empacotado como um arquivo JAR, usando a seguinte linha de comando:

java -javaagent:/caminho/para/agente/skywalking-agent.jar -jar seu-projeto.jar SW_AGENT_NAME=nome-do-servico

Verifique o arquivo de log skywalking-api.log na pasta logs do agente. Mensagens de aviso indicando que a instrumentação de classses falhou devido à ausência de classes de testemunha são comuns:

WARN 2021-02-03 15:36:44:520 main AbstractClassEnhancePluginDefine : enhance class com.exemplo.controller.MeuController by plugin org.apache.skywalking.apm.plugin.spring.mvc.v3.define.ControllerInstrumentation is not working. Because witness class org.springframework.web.servlet.view.xslt.AbstractXsltView is not existed.
WARN 2021-02-03 15:36:44:523 main AbstractClassEnhancePluginDefine : enhance class com.exemplo.controller.MeuController by plugin org.apache.skywalking.apm.plugin.spring.mvc.v4.define.ControllerInstrumentation is not working. Because witness class org.springframework.cache.interceptor.DefaultKeyGenerator is not existed.
... (outros avisos semelhantes) ...

Solução:

Esses avisos geralmente ocorrem porque o agente SkyWalking não consegue encontrar dependências de bibliotecas específicas do Spring MVC que ele tenta instrumentar. Para resolver isso:

  1. Copie todos os arquivos JAR da pasta optional-plugins do agente para a pasta plugins.
  2. Verifique se as dependências do seu projeto Spring Boot são compatíveis com os plugins do agente SkyWalking. Se um determinado JAR de plugin estiver faltando, adicione a dependência corrrespondente ao seu projeto ou copie o JAR ausente da distribuição do agente para a pasta plugins.

Problema 2: Exceção de violação de acesso (Access Violation) na JVM

Em alguns casos, a aplicação pode travar com um erro fatal da JVM, indicando uma violação de acesso, como:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000000000002, pid=948, tid=7460
#
# JRE version: Java(TM) SE Runtime Environment (8.0_05-b13) (build 1.8.0_05-b13)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.5-b02 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C  0x0000000000000002
#
... (detalhes do thread e registradores) ...

Solução:

Esse tipo de erro, especialmente com versões mais antigas do JDK 8 (como 1.8.0_05), pode ser um bug conhecido ou uma incompatibilidade. Tentar ajustar o tamanho da memória da JVM ou outros parâmetros de inicialização pode não resolver o problema. Uma solução eficaz é:

  • Atualizar a versão do seu JDK. No exemplo dado, a atualização do JDK 8 de 1.8.0_05 para 1.8.0_281 resolveu a falha.

Tags: java spring-boot skywalking apm Troubleshooting

Publicado em 6-8 06:47 por Thomas