共计 2641 个字符,预计需要花费 7 分钟才能阅读完成。
作者 | Montos(一个在后端路线上摸爬滚打的内卷人)
起源 | 阿里巴巴云原生公众号
Arthas 是阿里巴巴开源的 Java 诊断工具。让咱们可能在线排查我的项目产生的问题。除了晓得它的存在之外,咱们也须要晓得咱们如何去装置应用它,以便于进步咱们日常开发解决 BUG 的效率。
计划介绍
计划一:本地间接运行
往往最简略的办法理论是最无效的,它自身就是一个可运行的程序,所以咱们能够间接运行即可。
- 咱们能够间接通过官网下载对应的 jar,而后运行再进行 jar,执行对应的命令。
- 命令如下:
java -jar arthas-boot.jar [option]
- 演示如下:
计划二:Web Console 实现
咱们能够不通过每次进入 ssh 中进行执行程序,咱们也可通过 web 形式进行拜访操作. 通过官网下面的介绍 arthas 的 Web Console,能理解到大抵的搭建思路。
- 通过下载 arthas-tunnel-server。咱们能够拿到对应的 arthas 的 server 端。下载结束之后间接运行即可(我是将其在 ECS 上间接运行)。
- 在客户端对应的启动 arthas-boot。并且通过启动参数附加上 server 的地址(我是将其在本地运行)。
- 抉择对应的过程进行 attach,会呈现对应的 agent-id,再将其填写到对应的 server 端 http 页面中。
- 最初咱们就能够再 server 端进行操作,即 Web Console 实现实现。
计划三:我的项目依赖
基于 Spring 相干搭建的我的项目间接退出依赖(须要对应的环境反对,例如不能短少 tools.jar)。
- SpringBoot 我的项目依赖:
<dependency>
<groupId>com.taobao.arthas</groupId>
<artifactId>arthas-spring-boot-starter</artifactId>
<version>${arthas.version}</version>
</dependency>
- 非 SpringBoot 我的项目依赖:
<dependency>
<groupId>com.taobao.arthas</groupId>
<artifactId>arthas-agent-attach</artifactId>
<version>${arthas.version}</version>
</dependency>
<dependency>
<groupId>com.taobao.arthas</groupId>
<artifactId>arthas-packaging</artifactId>
<version>${arthas.version}</version>
</dependency>
- 本地我的项目启动之后能够间接拜访:
http://127.0.0.1:3658/
- 当然还能够联合下面介绍的 Web Console。例如配置文件中减少对应的配置信息:
arthas.agent-id=qwejqjnnnunnq
arthas.tunnel-server=ws://server 地址:7777/ws
- 演示如下:
以上步骤就是先把 tunnel-server 启动,而后本地配置连贯 tunnel-server。而后输出配置的 Id,即可实现对应的调试。
计划四:容器配置
基于 docker 配置,目前上容器服务的企业不在少数。对于容器服务,也是能够实用的。将 jar 下载下来之后进行 ADD 操作,或者每次通过构建 Dockerfile 则会产生对应含有 arthas 的镜像文件。
这里介绍下通过 Dockerfile 进行构建:
FROM openjdk:8-jdk-alpine
ADD target/*.jar app.jar
# copy arthas
COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas
RUN apk add --no-cache tini
ENTRYPOINT ["/sbin/tini", "--"]
CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
MAINTAINER Montos 1367654518@qq.com
上述是通过构建 Dockerfile 来实现的,这里就间接将镜像文件贴出来,这里是将以后 arthas 中的文件复制到对应的容器中,之后咱们能够通过 exec -it 进入执行,步骤和办法一相似。
总结
通过下面的介绍,其实我更举荐应用 Web 接入的形式更好,起因如下:
- 在服务间接部署在服务器上或者 ECS 云服务器状况下。咱们能够间接运行在对应的 client 端,然而咱们如何上到各个服务所在的服务器上?通过跳板机?那么咱们是不是操作的时候会有可能对应服务器造成影响,间接连贯服务器上是必定不行的。
- 服务在所运行的 pod 状况下。此时让你连贯服务是影响是比下面的状况会小很多,如果产生影响也只是影响到以后运行的 pod。然而如果你想间接连贯 pod,那么须要的将对应的 pod 端口须要映射到对应的宿主机上,而后再提供内部拜访 ecs 的链接。这样会使得每次 pod 须要映射进来的端口须要肯定的规定,无疑是加大了运维等工作,运行则也耗费了以后的资源(拜访页面等等则走 http 接口申请,如果通过 ws 连贯,缩小 7 层方面耗费)。
- 如果通过上述办法,那么咱们能够再一台机器上运行 server 即可,咱们每次拜访都通过拜访 server 去连贯到到对应的 client 端,同时对应的 agent-id 能够指定,咱们能够每次 pod 进行 client 运行的时候指定以后的 agent-id,让其与以后的 pod 进行一个绑定,便于咱们通过 server 进行连贯。
当然上述观点仁者见仁智者见智。以上介绍了几种部署以及运行 arthas 的办法,企业能够依据以后的我的项目架构抉择适合的部署进行解决。为什么须要????就因为能帮忙开发解决问题,不须要来回发版!
欢送登陆 start.aliyun.com 知口头手实验室体验 Arthas 57 个入手试验:https://start.aliyun.com/handson-lab/#!category=arthas
Arthas 试验预览
为了让更多开发者开始用上 Arthas 这个 Java 诊断神器,Arthas 社区联结 JetBrains 推出 Arthas 有奖征文活动: 聊聊这些年你和 Arthas 之间的那些事儿。 流动仍在炽热进行中,点击即可参加,欢送大家踊跃投稿,参加即有可能获奖!