在Docker Compose或Kubernetes中集成Arthas的最佳实践如下,结合生产环境需求和实际场景优化:
一、Docker Compose集成方案
1. 预装Arthas到应用镜像(推荐生产环境)
-
Dockerfile示例:
bashFROM openjdk:11-jdk-slim # 复制Arthas离线包(生产环境必选) COPY ./arthas /opt/arthas # 构建应用并设置启动脚本 COPY target/app.jar /app.jar CMD java -jar /app.jar & \ sleep 15 && \ java -jar /opt/arthas/arthas-boot.jar \ --tunnel-server "ws://tunnel-server:7777/ws" \ # 集中管理 --app-name ${APP_NAME} \ # 应用标识 --telnet-port 3658 \ # Telnet端口 --http-port 8563 # HTTP端口关键点:
- 使用
sleep 15确保应用完全启动后再启动Arthas。 - 通过环境变量动态配置应用名称,适配多环境部署。
- 使用
2. 临时诊断模式(开发/测试环境)
-
启动容器后手动安装:
bashdocker exec -it app-container sh -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar" -
适用场景:快速排查问题,无需修改镜像。
二、Kubernetes集成方案
1. 使用Arthas Tunnel Server集中管理
-
部署Tunnel Server(Helm方式):
bashhelm repo add arthas https://alibaba.github.io/arthas helm install arthas-tunnel arthas/arthas-tunnel-server -
应用配置:
yamlapiVersion: apps/v1 kind: Deployment metadata: name: java-app spec: template: spec: containers: - name: app image: myapp:latest env: - name: ARTHAS_TUNNEL_SERVER value: "ws://tunnel-server:7777/ws" # 集中管理地址 - name: ARTHAS_AGENT_ID value: "${POD_NAME}-${NAMESPACE}" # 唯一标识 command: ["/bin/sh"] args: ["-c", "java -jar /app.jar & sleep 15 && java -jar /opt/arthas/arthas-boot.jar"]优势:
- 通过Tunnel Server统一管理多Pod的诊断会话,无需SSH登录容器。
- 支持权限控制(如RBAC)和审计日志。
2. Arthas-K8s工具集成
-
一键诊断:
arduinoarthas-k8s attach <pod-name> # 自动注入Arthas Agent -
配置示例:
yaml# arthas-k8s配置文件 tunnels: - name: default tunnelServer: "ws://tunnel-server:7777/ws" apps: - name: myapp podSelector: matchLabels: app: myapp
三、安全与性能优化
1. 安全加固
-
权限控制:
-
通过Spring Security限制Tunnel Server访问。
-
示例配置:
yamlarthas: security: enabled: true users: - name: admin password: admin123 roles: "*" - name: dev password: dev123 roles: "monitor"
-
-
网络隔离:限制Tunnel Server端口仅允许内网访问。
2. 性能调优
-
资源限制:
yamlresources: limits: memory: 512Mi cpu: "1" requests: memory: 256Mi cpu: "500m" -
异步诊断:在PreStop Hook中异步收集数据,避免阻塞容器终止。
四、生产环境推荐方案
| 场景 | 方案 | 优势 |
|---|---|---|
| 常规诊断 | 预装Arthas + Tunnel Server | 统一入口,支持多租户管理 |
| 紧急排查 | 临时注入Agent | 快速响应,无需镜像修改 |
| K8s集群监控 | Arthas-K8s工具 + Prometheus | 自动化指标采集与告警 |
| 安全审计 | 权限控制 + 日志审计 | 满足合规要求 |
五、常用命令参考
bash
# 基础诊断
dashboard # 查看JVM实时状态
thread -n 5 # 查看CPU最高的线程
watch # 监控方法入参/返回值
jad # 反编译类
# 高级分析
profiler start # 生成火焰图
trace # 追踪方法调用链
monitor # 监控方法执行耗时
总结
- 生产环境必选:预装Arthas到镜像 + Tunnel Server集中管理。
- 安全关键:启用权限控制,限制网络访问。
- 性能保障:合理分配资源,避免诊断工具影响业务。