ARMS的探针和其他主流APM产品的探针一样,都是基于ASM等框架对字节码进行插桩,以实现监控信息自动采集。同时安装两个APM探针相当于对您的代码插桩两次,由于不同厂家的插桩代码实现不同,代码冲突可能造成各类问题(例如应用启动缓慢以及监控信息丢失),因此建议您不要同时安装多个APM探针。
在替换监控方案的迁移过渡期(例如从使用其他APM产品,全面转向ARMS应用监控)可能会存在应用同时安装两个APM的需求,因此ARMS做了大量的探针兼容性测试,尽可能的提升迁移过渡期的探针兼容性。但在探针共存的情况下,依然存在ARMS探针和其他APM探针同时增强某个插件造成的局部冲突可能性。在这种情况下,您可以在ARMS的应用自定义配置中单独关闭这个插件的开关,以规避冲突。
即使没有局部冲突,同时安装多个探针也会导致应用性能受到影响。请确保迁移过渡期结束后,只保留ARMS的探针。
SkyWalking的Cache机制会导致探针兼容性问题,导致ARMS的Arthas等能力无法使用,如果您从SkyWalking迁移到ARMS应用监控,在过渡期建议在Java启动命令中增加如下参数关闭Skywalking的Cache机制。更多信息,请参见SkyWalking官方文档。
-Dskywalking.agent.is_cache_enhanced_class=true -Dskywalking.agent.class_cache_mode=MEMORY
如果您同时安装了两个APM探针,在应用启动或者应用运行期间存在问题,例如启动过程报错、业务请求报错等情况,您可以优先考虑调整探针挂载顺序进行重启。推荐的探针挂载顺序调整方式如下:
手动接入方式调整启动参数
如果您是容器服务ACK环境自动安装探针的方式,可以尝试使用手动安装探针方式;如果您已经是手动安装探针方式,可以调整接入脚本中开源Skywalking探针与ARMS探针的挂载顺序,保证ARMS探针在后。
Spring Boot场景示例:
-javaagent:/home/admin/apache-skywalking-apm-bin/agent/skywalking-agent.jar -javaagent:/{user.workspace}/ArmsAgent/aliyun-java-agent.jar
自动接入方式添加JVM参数
如果您是容器服务ACK环境自动安装探针的方式,改用手动安装探针方式修改接入脚本的工作量较大,可以使用在容器环境中添加JVM参数的方式。
登录容器服务管理控制台,在目标集群的无状态页面,单击接入ARMS应用右侧的编辑。
在环境变量中添加SkyWalking探针参数,然后单击保存。
针对其他开源APM探针,例如TTL-Agent、Pinpoint、OTel Agent等,如果在同时安装两个探针的情况下,应用启动或运行时存在问题,也可以通过上述调整探针挂载顺序的方式尝试进行解决。具体的探针顺序调整方式与上述步骤保持一致,仅需要将探针包名与探针挂载路径替换为您实际使用的探针与文件路径即可。例如使用TransmittableThreadLocal探针的场景,挂载顺序调整方式如下:
手动接入方式调整启动参数
如果您是通过容器服务ACK环境自动安装探针的方式,可以尝试使用手动安装探针方式;如果您已经是手动安装探针方式,可以调整接入脚本中开源TTL探针与ARMS探针的挂载顺序,保证ARMS探针在后。
Spring Boot场景示例:
-javaagent:/home/admin/transmittable-thread-local-2.14.2.jar -javaagent:/{user.workspace}/ArmsAgent/aliyun-java-agent.jar
自动接入方式添加JVM参数
如果您是容器服务ACK环境自动安装探针的方式,改用手动安装探针方式修改接入脚本的工作量较大,可以使用在容器环境中添加JVM参数的方式。
登录容器服务管理控制台,在目标集群的无状态页面,单击接入ARMS应用右侧的编辑。
在环境变量中添加TTL探针参数,然后单击保存。
如果使用字节码加密工具对字节码进行加密,则探针要求如下,否则接入ARMS探针后可能导致启动失败。
确保自定义的Agent在最开始运行, ARMS探针在后面运行。
需要使用4.x以上版本的ARMS探针,以保证应用能够正常接入。