全部产品
Search
文档中心

应用实时监控服务ARMS:如何支持单机多实例?

更新时间:Aug 18, 2026

如何支持单机多实例?

如需在同一台机器上部署同一应用的多个实例,可以通过-Darms.agentId(逻辑编号,如001、002)参数来区分接入的JVM进程,例如:

java -javaagent:/{user.workspace}/ArmsAgent/aliyun-java-agent.jar -Darms.licenseKey=<LicenseKey> -Darms.appName=<AppName> -Darms.agentId=001 -jar demoApp.jar
说明

如果您使用的探针版本在2.7.3.5以下,请将本文中的aliyun-java-agent.jar替换为arms-bootstrap-1.7.0-SNAPSHOT.jar。建议您尽快将探针升级至最新版本。

Docker 容器跨主机部署场景

在不同 ECS 上通过 Docker 部署同一应用时,Docker 默认的 bridge 网络使用 172.17.0.0/16 子网,不同主机上的容器可能分配到相同的内部 IP(如 172.17.0.2)。ARMS 通过 IP 识别应用实例,相同 IP 的容器会被合并为同一实例,导致应用监控的实例列表出现合并或缺失。

方案一:使用 host 网络模式

使用 --network=host 启动容器,容器直接使用宿主机 IP,不同 ECS 的宿主机 IP 天然不同,可避免实例被合并:

docker run --network=host \
  -e JAVA_TOOL_OPTIONS="-javaagent:/{user.workspace}/ArmsAgent/aliyun-java-agent.jar -Darms.licenseKey=<LicenseKey> -Darms.appName=<AppName>" \
  <image>

方案二:通过环境变量注入 agentId

如果不便切换网络模式,也可以通过 HOSTNAME 环境变量在不同机器上动态注入不同的 -Darms.agentId 值,部署脚本保持统一:

java -javaagent:/{user.workspace}/ArmsAgent/aliyun-java-agent.jar -Darms.licenseKey=<LicenseKey> -Darms.appName=<AppName> -Darms.agentId=$HOSTNAME -jar demoApp.jar