1

image

前言

   Arthas(阿尔萨斯)是阿里巴巴开源的 Java 诊断工具。让我们能够在线排查项目发生的问题。除了知道它的存在之外,我们也需要知道我们如何去安装使用它,以便于提高我们日常开发解决BUG的效率。

方案介绍

方案一    本地直接运行

  往往最简单的方法实际是最有效的,它本身就是一个可运行的程序,所以我们可以直接运行即可。
  1. 我们可以直接通过官网下载对应的jar,然后运行再进行jar再执行对应的命令。
  2. 命令如下:
java -jar arthas-boot.jar [option]
  1. 演示如下:

image

方案二    Web Console实现

  我们可以不通过每次进入ssh中进行执行程序,我们也可通过web方式进行访问操作.通过官网上面的介绍arthas的Web Console,能了解到大致的搭建思路。
  1. 通过下载arthas-tunnel-server。我们可以拿到对应的arthasserver端。下载完毕之后直接运行即可(我是将其在ECS上直接运行)。
    image
  2. 在客户端对应的启动arthas-boot。并且通过启动参数附加上server的地址(我是将其在本地运行)。
    image
  3. 选择对应的进程进行attach,会出现对应的agent-id,再将其填写到对应的serverhttp页面中。
    2.jpg
    1.jpg
  4. 最后我们就可以再server端进行操作,即Web Console实现完成。

1d378fdc0ac54e7195dd55962c7b22f3.jpg

方案三    项目依赖

  基于Spring相关搭建的项目直接加入依赖(需要对应的环境支持,例如不能缺少tools.jar)。
  1. SpringBoot项目依赖:

          <dependency>
                <groupId>com.taobao.arthas</groupId>
                <artifactId>arthas-spring-boot-starter</artifactId>
                <version>${arthas.version}</version>
            </dependency>
  2. 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>
  3. 本地项目启动之后可以直接访问:

    http://127.0.0.1:3658/
  4. 当然还可以结合上面介绍的Web Console。例如配置文件中增加对应的配置信息:

    arthas.agent-id=qwejqjnnnunnq
    arthas.tunnel-server=ws://server地址:7777/ws
  5. 演示如下:

1.jpg
2.jpg
3.jpg

以上步骤就是先把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的方法,企业可以根据当前的项目架构选择合适的部署进行解决。为什么需要????就因为能帮助开发解决问题,不需要来回发版!!!!!!

Montos
4 声望1 粉丝