6

Arthas使用的各类方式

 3 years ago
source link: https://segmentfault.com/a/1190000039108905
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

方案一    本地直接运行

  往往最简单的方法实际是最有效的,它本身就是一个可运行的程序,所以我们可以直接运行即可。

  1. 我们可以直接通过官网下载对应的jar,然后运行再进行jar再执行对应的命令。
  2. 命令如下:
java -jar arthas-boot.jar [option]
  1. 演示如下:

方案二    Web Console实现

  我们可以不通过每次进入ssh中进行执行程序,我们也可通过web方式进行访问操作.通过官网上面的介绍arthas的Web Console,能了解到大致的搭建思路。

  1. 通过下载arthas-tunnel-server。我们可以拿到对应的arthasserver端。下载完毕之后直接运行即可(我是将其在ECS上直接运行)。
  1. 在客户端对应的启动arthas-boot。并且通过启动参数附加上server的地址(我是将其在本地运行)。
  1. 选择对应的进程进行attach,会出现对应的agent-id,再将其填写到对应的serverhttp页面中。

1.jpg

  1. 最后我们就可以再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>
  1. 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>
  1. 本地项目启动之后可以直接访问:
http://127.0.0.1:3658/
  1. 当然还可以结合上面介绍的Web Console。例如配置文件中增加对应的配置信息:
arthas.agent-id=qwejqjnnnunnq
arthas.tunnel-server=ws://server地址:7777/ws
  1. 演示如下:

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 [email protected]

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK