Docker容器使用Arthas监控Java应用的完整指南

 更新时间:2025年08月22日 08:45:35   作者:荔枝爱编程  
这篇文章主要为大家详细介绍了如何在运行中的 Docker 容器里,为目标 Java 进程快速注入 Arthas 并进行线上诊断,感兴趣的小伙伴可以了解一下

为什么要这么做

  • Arthas 支持 JDK 11 及以上版本,本身并不存在“无法直接跟踪 JDK 11”的问题;问题的根因常出现在容器基础镜像过于精简。
  • 从 JDK 9 起工具布局与模块化发生变化,而许多瘦身镜像(如 openjdk:*‑slim、alpine 变体)常不包含 jcmd 等诊断工具,也没有随镜像提供 jattach,导致无法直接对 JVM 执行动态 attach;安装完整 JDK 或额外安装 jattach 后即可恢复能力。
  • 另一个高频问题是“运行 Arthas 的 Java 与目标 JVM 版本不一致”会导致 attach 失败或不稳定,建议使用与目标进程一致或相近版本的 JDK 来运行 arthas‑boot。

本文演示如何在运行中的 Docker 容器里,为目标 Java 进程快速注入 Arthas 并进行线上诊断。

步骤 1:进入容器并安装必要工具

# 进入正在运行的容器
docker exec -it xxx /bin/sh

# 安装 jattach (用于将 Arthas Agent 注入到目标 JVM)
apk add --no-cache jattach

# 安装 JDK (解决 tools.jar 缺失问题,非常重要!)
apk add --no-cache openjdk11-jdk

# 安装网络工具 (用于后续排查和验证)
apk add --no-cache net-tools iproute2

步骤 2:下载 Arthas

# 下载 arthas-boot.jar
wget https://arthas.aliyun.com/arthas-boot.jar

步骤 3:确认目标 Java 进程 PID

# 查看 Java 进程,确认 PID(通常为 1)
ps -ef | grep java

会看到类似输出:

1 root 9:33 java -Xms512m ... -jar tiji-risk-prevention.jar

记下 PID,这里是 1

步骤 4:将 Arthas Agent 注入到目标 JVM

# 使用 jattach 将 Arthas Agent 加载到 PID 为 1 的 Java 进程中
jattach 1 load instrument false /root/.arthas/lib/4.0.5/arthas/arthas-agent.jar

注意:如果 /root/.arthas/ 目录不存在,先运行一次 java -jar arthas-boot.jar 1 来触发 Arthas 的自动下载和解压。

步骤 5:手动启动 Arthas 核心服务(关键步骤)

这一步是解决会遇到的 Connection refused 问题的关键:

# 手动启动 Arthas Core 服务,监听 telnet 和 HTTP 端口
java -cp /root/.arthas/lib/4.0.5/arthas/arthas-core.jar \
     com.taobao.arthas.core.Arthas \
     --telnet-port 3658 \
     --http-port 3659 \
     --ip 127.0.0.1 \  # 或者使用 --ip 0.0.0.0 以允许外部访问
     --pid 1 &

注意:使用 & 让它在后台运行。

步骤 6:验证 Arthas 是否成功启动

# 检查 3658 端口是否在监听
netstat -tlnp | grep 3658

你应该看到类似输出:

tcp6 0 0 127.0.0.1:3658 :::* LISTEN 1/java

步骤 7:连接到 Arthas

现在你可以通过以下任一方式连接:

方式一:使用 arthas-boot.jar (推荐)

# 再次运行 arthas-boot.jar,它会检测到端口已监听并直接连接
java -jar arthas-boot.jar 1

步骤 8:开始使用 Arthas 进行诊断

连接成功后,你会看到 Arthas 的欢迎界面:

  ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.                           
 /  O  \ |  .--. ''--.  .--'|  '--'  | /  O  \ '   .-'                          
|  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.                          
|  | |  ||  |\  \    |  |   |  |  |  ||  | |  |.-'    |                         
`--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'                          

wiki        https://arthas.aliyun.com/doc                                         
tutorials   https://arthas.aliyun.com/doc/arthas-tutorials.html                   
version     4.0.5                                                               
...
[arthas@1]$

现在你就可以使用 Arthas 命令来监控你的方法了,例如:

# 查找方法
sm *getPatrolTaskTrack*

# 跟踪方法执行耗时
trace com.yourcompany.service.YourClass getPatrolTaskTrack

# 监控方法调用统计
monitor com.yourcompany.service.YourClass getPatrolTaskTrack

# 查看方法调用堆栈
stack com.yourcompany.service.YourClass getPatrolTaskTrack

清理

# 可按需删除临时文件与解压目录(路径因实际解压位置而异)
rm -f /tmp/arthas-boot.jar
# Arthas 解压目录一般位于 ~/.arthas 或 /root/.arthas
rm -rf ~/.arthas || true

参考

Arthas 官方站点与使用指南:arthas.aliyun.com

到此这篇关于Docker容器使用Arthas监控Java应用的完整指南的文章就介绍到这了,更多相关Docker Arthas监控Java应用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker-CE安装的两种实现方式

    Docker-CE安装的两种实现方式

    文章指导如何卸载失败安装的Docker,并提供两种安装方式:官方脚本一键安装与手动安装Docker CE,步骤涵盖更新系统、添加密钥和仓库、安装组件、启动服务及验证安装
    2025-09-09
  • Docker Compose详细介绍

    Docker Compose详细介绍

    Docker Compose是一个用于定义和运行多个Docker容器的工具。它可以让用户轻松地定义和管理多个容器的配置,并且可以通过简单的命令来启动、停止和重启这些容器。在本文中,我们将详细介绍Docker Compose的使用和功能
    2023-04-04
  • Docker容器镜像工具使用示例详解(拉取、构建、管理、优化)

    Docker容器镜像工具使用示例详解(拉取、构建、管理、优化)

    本文详细介绍了Docker镜像的操作方法,包括获取、列出、运行、删除、保存镜像以及镜像的导出和导入,每个操作都提供了具体的命令和示例,旨在帮助用户高效管理Docker镜像,需要的朋友可以参考下
    2025-07-07
  • Docker数据卷的核心原理与管理逻辑解读

    Docker数据卷的核心原理与管理逻辑解读

    Docker数据卷实现容器与宿主机的数据持久化,分为绑定挂载(手动指定路径)和管理卷(自动管理),前者适合开发环境,后者适用于生产环境,还支持多容器共享、备份迁移及清理,保障数据安全与资源高效利用
    2025-08-08
  • Docker容器项目无法访问MySQL的问题排查与解决策略

    Docker容器项目无法访问MySQL的问题排查与解决策略

    本文分析了Docker容器连接MySQL时常见的问题,并提供了解决方案,主要问题包括网络隔离、服务启动顺序、权限配置等,解决方案包括使用自定义网络、连接宿主机MySQL、健康检查与启动等待、端口映射与防火墙配置、MySQL权限配置和Host网络模式等,需要的朋友可以参考下
    2026-04-04
  • 阿里云镜像安装docker报错的问题及解决方案

    阿里云镜像安装docker报错的问题及解决方案

    这篇文章主要介绍了阿里云镜像安装docker报错的问题及解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • gitlab-runner中搭建nvm、nrm以及优化maven打包方式

    gitlab-runner中搭建nvm、nrm以及优化maven打包方式

    文章描述了如何在GitLab Runner上配置NVM、NRM,并优化Maven打包过程,通过上述配置和优化,作者将Maven打包时间从三分钟缩短到不到40秒
    2024-11-11
  • 详解使用Docker容器来源码编译etcd

    详解使用Docker容器来源码编译etcd

    这篇文章主要介绍了详解使用Docker容器来源码编译etcd,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • docker容器设置时区的几种方式小结

    docker容器设置时区的几种方式小结

    Docker的基础镜像设置大多是Etc/UTC,也就是标准的UTC 时间,所以要简单的调整一下,本文主要介绍了docker容器设置时区的几种方式小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • Docker图形工具Portainer的具体使用

    Docker图形工具Portainer的具体使用

    本文主要介绍了Docker图形工具Portainer的具体使用,Portainer是一个开源的轻量级管理UI,提供了一个直观的图形用户界面,使得管理Docker容器变得更加容易,感兴趣的可以了解一下
    2024-11-11

最新评论