当前位置: 首页 > news >正文

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

🚀 作者主页: 有来技术
🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot
🌺 仓库主页: Gitee 💫 Github 💫 GitCode
💖 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请纠正!

目录

  • Arthas 简介
  • Arthas 官方
  • Docker 容器使用 Arthas
    • 方案一:容器内下载运行 Arthas
    • 方案二:安装 Arthas 到基础镜像
  • 常见问题排查
    • CPU 占用过高
    • 内存占用过高
    • 死锁排查
  • 结语

Arthas 简介

img

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。然而,如果问题确实发生,为了保留现场,需要采用这种方案。

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

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

在 DockerFile 里添加安装 Arthas 命令

# 基础镜像
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 占用过高

# 查看控制台
dashboard

# 查看CPU占用top5 的线程
thread -n 5

内存占用过高

// TODO

死锁排查

# 查看是否有死锁
thread -b 

结语

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

http://www.lryc.cn/news/253745.html

相关文章:

  • Django 用户验证与权限管理
  • 二手物品交易系统源码小程序H5闲置物品转让APP成品
  • Linux库之动态库静态库
  • xilinx系列FPGA基于VIVADO的pin delay列表生成说明
  • 1.vue学习笔记(vue简介+API风格+开发前的准备)
  • 树莓派学习:学习opencv+用opencv获取树莓派mjpg摄像头视频流
  • 探索Playwright的现代自动化测试力量
  • 游戏mod制作--引擎与解包
  • 3D模型制作木质纹理贴图
  • [足式机器人]Part2 Dr. CAN学习笔记-数学基础Ch0-4线性时不变系统中的冲激响应与卷积
  • CSS BFC特性和应用
  • 软件工程 - 第8章 面向对象建模 - 3 - 动态建模
  • Stable Diffusion AI绘画系列【16】:霸气侧漏的二次元武侠风
  • 第二证券:苹果市值重返3万亿美元,关键因素并非人工智能
  • 西南科技大学C++程序设计实验六( 继承与派生一)
  • MySQL 性能优化
  • 求职招聘小程序源码系统 全开源源代码:找工作+招人才 平台级别运营版 附带完整的搭建教程
  • 26、卷积 - 实际上是一个特征提取器
  • web前端之vue3
  • 原来在C++的类中声明函数时可以不写参数名只写参数类型
  • 独孤思维:这里有蓝海项目,你要吗?
  • 外卖平台推荐算法的优化与实践
  • CONTROLLING VISION-LANGUAGE MODELS FOR MULTI-TASK IMAGE RESTORATION
  • HarmonyOS应用开发——页面
  • Java流Stream使用详解(练习)
  • 请介绍一下MySQL的存储引擎及其特点
  • Python---魔术方法
  • 手把手教你注册意大利商标
  • pandas详细笔记
  • win11安装(未完待续)