如何支持单机多实例?
如需在同一台机器上部署同一应用的多个实例,可以通过-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