简介
Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。
关于arthas的命令使用,在官网上已经有了很详细的介绍了,下面我们重点讲解一下arthas在各种环境下的运行方式。
安装与运行
方案一:宿主机和Docker中手动安装
下载arthas-boot.jar
,然后用java -jar
的方式启动:
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
启动arthas之后输入需要监控的进程pid即可进入arthas终端。
方案二:Alibaba Cloud Toolkit运行arthas
Cloud Toolkit是一个IDE 插件,帮助开发者更高效地开发、测试、诊断并部署应用。使用本插件,开发者能够方便地将本地应用一键部署到任意机器,或 ECS、EDAS、Kubernetes;并支持高效执行终端命令和 SQL 等。
setp1:下载插件并重启idea
setp2:配置服务器相关信息
注意:ssh的端口号是22,如果是容器环境需要将宿主机的端口号映射为容器的22端口,连接的时候填宿主机端口
setp3:运行arthas
点击诊断之后会自动运行arthas-boot.jar,如果服务器中没有java进程,则arthas进程会自动退出。
方案三:把arthas安装到基础镜像
在构建容器镜像的时候直接将arthas打包进镜像中,也分为两个方式:在构建镜像的时候下载和从主机中拷贝。在docker中安装arthas的前提是容器中安装的java环境是JDK,如果安装JRE则会缺失很多JAVA的命令工具和类库,Arthas是没法正常工作的。
RUN apt-get update
RUN apt-get install -y curl #install wget lib
RUN mkdir -p arthas && cd arthas #create folder and cd to folder
RUN curl -O https://arthas.aliyun.com/arthas-boot.jar
FROM adoptopenjdk/openjdk8:alpine-slim
# copy arthas
COPY arthas/arthas-boot.jar /opt/arthas
拷贝的时候要注意一下文件的路径
方案四:使用arthas-spring-boot-starter
1、在项目的pom.xml引入
<dependency>
<groupId>com.taobao.arthasgroupId>
<artifactId>arthas-spring-boot-starterartifactId>
<version>${arthas.version}version>
dependency>
2、修改yml文件
yml有两种配置方式
2.1、Arthas Tunnel实现远程管理
- a、下载并部署arthas tunnel server
https://github.com/alibaba/arthas/releases
java -jar arthas-tunnel-server-3.5.0-fatjar.jar
注&#xff1a; 默认情况下&#xff0c;arthas tunnel server的web端口是8080&#xff0c;arthas agent连接的端口是7777
arthas:
agent-id: ${ARTHAS_AGENT_ID:hsehdfsfghhwertyfad}
app-name: ${spring.application.name}
tunnel-server: ${ARTHAS_TUNNEL_SERVER:ws://localhost:7777/ws}
注&#xff1a; agentId要保持唯一&#xff0c;否则会在tunnel server上冲突&#xff0c;不能正常工作
2.2、直接在项目的yml配置
arthas:
# 通过http访问的端口
http-port: 8563
# 通过telnet访问的端口
telnet-port: 3658
session-timeout: 1800
# 绑定的ip
ip: 0.0.0.0
注&#xff1a; 如果配置 arthas.telnetPort为 -1 &#xff0c;则不监听 telnet端口。如果配置 arthas.telnetPort为 0 &#xff0c;则随机telnet端口。arthas.httpPort类似。
绑定的ip
ip: 0.0.0.0
**注&#xff1a;** 如果配置 arthas.telnetPort为 -1 &#xff0c;则不监听 telnet端口。如果配置 arthas.telnetPort为 0 &#xff0c;则随机telnet端口。arthas.httpPort类似。