🚀 作者主页: 有来技术
🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot
🌺 仓库主页: Gitee 💫 Github 💫 GitCode
💖 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请纠正!
目录
- Arthas 简介
- Arthas 官方
- Docker 容器使用 Arthas
- 方案一:容器内下载运行 Arthas
- 方案二:安装 Arthas 到基础镜像
- 常见问题排查
- CPU 占用过高
- 内存占用过高
- 死锁排查
- 结语
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。然而,如果问题确实发生,为了保留现场,需要采用这种方案。
# 进入容器
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极大地提高了开发调试的效率,为应用的稳定性和性能优化提供了有力支持。将这一强大工具与容器技术结合,为现代应用开发提供了更加灵活、高效的解决方案。