Docker 环境中 Spring Boot 应用的 Arthas 故障排查与性能优化实战

🚀 作者主页: 有来技术

🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot

🌺 仓库主页: Gitee 💫 Github 💫 GitCode

💖 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请纠正!

目录

  • [Arthas 简介](#Arthas 简介)
  • [Arthas 官方](#Arthas 官方)
  • [Docker 容器使用 Arthas](#Docker 容器使用 Arthas)
    • [方案一:容器内下载运行 Arthas](#方案一:容器内下载运行 Arthas)
    • [方案二:安装 Arthas 到基础镜像](#方案二:安装 Arthas 到基础镜像)
  • 常见问题排查
  • 结语

Arthas 简介

Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

Arthas 官方

名称 地址
官方文档 https://arthas.aliyun.com/doc
Git 仓库 https://github.com/alibaba/arthas
Docker 镜像 https://hub.docker.com/r/hengyunabc/arthas/tags

Docker 容器使用 Arthas

Spring Boot 项目使用 Docker 容器部署,如何在容器中使用 Arthas 呢?

方案一:容器内下载运行 Arthas

在这种情况下,通常是基于一种自信的假设,即不会在基础镜像中安装 Arthas。然而,如果问题确实发生,为了保留现场,需要采用这种方案。

bash 复制代码
# 进入容器
docker exec -it youlai-boot /bin/sh
# 下载并运行 Arthas
wget https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar

方案二:安装 Arthas 到基础镜像

在 DockerFile 里添加安装 Arthas 命令

bash 复制代码
# 基础镜像
FROM openjdk:17-jdk-alpine

# 维护者信息
MAINTAINER youlai <youlaitech@163.com>

# 设置国内镜像源(中国科技大学镜像源),修改容器时区(alpine镜像需安装tzdata来设置时区),安装字体库(验证码)
RUN echo -e https://mirrors.ustc.edu.cn/alpine/v3.7/main/ > /etc/apk/repositories  \
    && apk --no-cache add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone \
    && apk --no-cache add ttf-dejavu fontconfig

# 在运行时自动挂载 /tmp 目录为匿名卷,提高可移植性
VOLUME /tmp

# 将构建的 Spring Boot 可执行 JAR 复制到容器中,重命名为 app.jar
ADD target/youlai-boot.jar app.jar

# 安装 Arthas 到镜像
COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas

# 指定容器启动时执行的命令
CMD java \
    -Djava.security.egd=file:/dev/./urandom \
    -jar /app.jar

# 暴露容器的端口
EXPOSE 8989

常见问题排查

CPU 占用过高

bash 复制代码
# 查看控制台
dashboard
bash 复制代码
# 查看CPU占用top5 的线程
thread -n 5

内存占用过高

// TODO

死锁排查

bash 复制代码
# 查看是否有死锁
thread -b 

结语

在Docker容器中使用Arthas,为Java应用的监控与排查提供了便捷利器。通过实时诊断和解决CPU、内存、死锁等问题,Arthas极大地提高了开发调试的效率,为应用的稳定性和性能优化提供了有力支持。将这一强大工具与容器技术结合,为现代应用开发提供了更加灵活、高效的解决方案。

相关推荐
无理 Java5 分钟前
【技术详解】SpringMVC框架全面解析:从入门到精通(SpringMVC)
java·后端·spring·面试·mvc·框架·springmvc
gobeyye33 分钟前
spring loC&DI 详解
java·spring·rpc
鱼跃鹰飞34 分钟前
Leecode热题100-295.数据流中的中位数
java·服务器·开发语言·前端·算法·leetcode·面试
我是浮夸37 分钟前
MyBatisPlus——学习笔记
java·spring boot·mybatis
TANGLONG22244 分钟前
【C语言】数据在内存中的存储(万字解析)
java·c语言·c++·python·考研·面试·蓝桥杯
杨荧1 小时前
【JAVA开源】基于Vue和SpringBoot的水果购物网站
java·开发语言·vue.js·spring boot·spring cloud·开源
liuxin334455661 小时前
大学生就业招聘:Spring Boot系统的高效实现
spring boot·后端·mfc
杨哥带你写代码1 小时前
构建高效新闻推荐系统:Spring Boot的力量
服务器·spring boot·php
Leighteen1 小时前
ThreadLocal内存泄漏分析
java