You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OpenTelemetry Java Agent插装时遇JNI错误求助

排查步骤与解决方案

1. 优先解决核心签名错误

java.lang.SecurityException: Invalid signature file digest 是触发后续问题的根源,按以下方式排查:

  • 移除项目Jar的签名文件:如果你的项目Jar经过代码签名,Agent插装会修改字节码导致签名失效。手动解压项目Jar,删除META-INF目录下的*.SF、*.DSA、*.RSA文件后重新打包;或者在Maven构建时跳过签名:
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jarsigner-plugin</artifactId>
      <configuration>
        <skip>true</skip>
      </configuration>
    </plugin>
    
  • 验证OpenTelemetry Agent完整性:重新下载支持Java 17的最新稳定版Agent,用官方校验和验证文件未损坏。

2. 处理连接拒绝问题

ConnectException: Connection refused 是因为OpenTelemetry Agent默认会尝试连接本地的OpenTelemetry Collector(localhost:4317),未启动Collector时会抛出该错误。解决方式:

  • 启动本地OpenTelemetry Collector;
  • 或者通过Agent配置关闭数据导出,添加VM参数:
    -Dotel.traces.exporter=none -Dotel.metrics.exporter=none -Dotel.logs.exporter=none
    

3. 进一步兼容性排查

  • 确认Agent对Java 17的支持:确保使用的OpenTelemetry Java Agent版本≥1.10.0(该版本开始全面支持Java 17);
  • 简化启动命令测试:执行 java -javaagent:/path/to/opentelemetry-javaagent.jar -version,如果仍报错,说明Agent与Java环境不兼容,尝试更换Agent版本;
  • 启用Agent调试日志:添加参数 -Dotel.javaagent.debug=true 启动,查看详细类加载日志,排查是否存在依赖冲突(比如项目中的okhttp3版本与Agent内置版本不一致);
  • 在IntelliJ中直接配置Agent:在Run/Debug配置的VM Options中添加-javaagent:/path/to/opentelemetry-javaagent.jar,排除命令行参数的潜在问题。

4. 对比其他Agent的差异

既然Jacoco可以正常工作,说明Java Agent机制本身没问题,重点排查:

  • OpenTelemetry Agent的字节码插装范围更广,可能触及了签名类;
  • 尝试通过otel.javaagent.exclude-classes参数排除签名类或第三方库(比如okhttp3)的插装,测试是否解决问题:
    -Dotel.javaagent.exclude-classes=okhttp3.**
    

内容的提问来源于stack exchange,提问作者Arseni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 18:43:16