Arthas(阿尔萨斯)能为你做什么?
Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。
当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:
- 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
- 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
- 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
- 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
- 是否有一个全局视角来查看系统的运行状况?
- 有什么办法可以监控到JVM的实时运行状?
- 怎么快速定位应用的热点,生成火焰图?
Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。
注:本文假设你已经会使用Arthas的命令,如您不熟悉arthas的基本使用方法,请移步https://arthas.aliyun.com/doc/quick-start.html查看
在Docker里使用JDK
很多时候,应用在docker里出现arthas无法工作的问题,是因为应用没有安装 JDK ,而是安装了 JRE 。如果只安装了 JRE,则会缺少很多JAVA的命令行工具和类库,Arthas也没办法正常工作。下面介绍两种常见的在Docker里使用JDK的方式。
使用公开的JDK镜像:
1 | FROM openjdk:8-jdk |
或者:
1 | FROM openjdk:8-jdk-alpine |
通过包管理软件来安装:
1 | # Install OpenJDK-8 |
或者:
1 | RUN yum install -y \ |
如何在Docker中使用Arthas
最简单的方法诊断Docker里的Java进程
1 | docker exec -it ${containerId} /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar" |
上述命令的意思是直接下载arthas并运行,前提条件是环境机器上需要有wget命令。如果没有需要提前安装。
把Arthas安装到基础镜像里
1 | FROM openjdk:8-jdk-alpine |
上述Dockerfile中的描述为,将Arthas在构建镜像时复制进去。容器启动后就拥有Arthas工具,可以直接使用,如下:
1 | docker exec -it ${containerId} /bin/bash -c "java -jar /opt/arthas/arthas-boot.jar" |
在已经上线运行的容器,并且不能再容器中下载Arthas工具的情况下使用
这种问题是线上最常见的问题。一般生产环境并不会将Arthas构建到镜像中,并且生产服务器上的网络策略一般都不会使镜像直接与外网接通,尤其是是微服务架构的系统。这时就可以采用一种曲线的方式来使已经运行的线上容器拥有使用Arthas的能力。
a. 从容器外(开发环境或其他可以连接外网的环境)获取Arthas。获取连接参考https://arthas.aliyun.com/doc/download.html或者https://github.com/alibaba/arthas/releases。
b. 通过ftp工具将Arthas上传到运行镜像的宿主机上
c. 复制Arthas到镜像中
1 | docker cp ./arthas-packaging-3.4.6-bin.zip ${containerId}:/opt |
d. 解压Arthas
1 | docker exec -it ${containerId} /bin/bash |
e. 运行Arthas
1 | cd /opt/arthas |
至此,镜像中已成功运行Arthas。
大功告成!
欢迎关注我的公众号 须弥零一,跟我一起学习IT知识。
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !