阿里开源性能监控神器Arthas

简介: 阿里开源性能监控神器Arthas,帮助你快速排查线上问题

1 Arthas是什么?

Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。

当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?

我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?

遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?

线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!

是否有一个全局视角来查看系统的运行状况?

有什么办法可以监控到JVM的实时运行状态?

怎么快速定位应用的热点,生成火焰图?

怎样直接从JVM内查找某个类的实例?

2 Arthas安装下载

curl -O https://arthas.aliyun.com/arthas-boot.jar

或者官网下载压缩包

地址:https://github.com/alibaba/arthas/releases

3 启动

默认情况下,arthas只监听 127.0.0.1,所以如果想从远程连接,则可以使用 --target-ip参数指定listen的IP

java -jar arthas-boot.jar   #默认127.0.0.1

或者

java -jar arthas-boot.jar --target-ip 172.22.37.21   #指定ip,可通过Web Console远程访问

说明:本案例因为用的是阿里云服务器,公网ip是通过NAT映射到了云服务器上。由于本地并不存在对应ip网卡,因此绑定的是内外ip,远程访问Web Console用外网ip


选择进程,输入1

4 控制台访问

http://60.205.187.137:8563//

或者

http://60.205.187.137:3658/

PS:两个端口 , 3658是 telnet, 8563是 http端口。

5 关于配置

arthas.properties文件在arthas的目录下。
如果是自动下载的arthas,则目录在~/.arthas/lib/3.x.x/arthas/下面
如果是下载的完整包,在arthas解压目录下

6 命令

参考 https://arthas.aliyun.com/doc/commands.html

7 tunnel server

为什么要用tunnel server?
在流式计算里,Java进程可以是在不同的机器启动的,想要使用Arthas去诊断会比较麻烦,因为用户通常没有机器的权限,即使登陆机器也分不清是哪个Java进程
通常情况下,生产的机器都不会是一个,大部分是集群模式,利用tunnel server我们就可以把所有集群节点都管理起来

7.1下载tunnel server

下载地址: https://github.com/alibaba/arthas/releases

启动tunnel server

java -jar arthas-tunnel-server-3.6.3-fatjar

默认会生成一个密码,后续可用于登录tunnel-server控制台

访问http://60.205.187.137:8080/ ,目前还没有应用被attach

7.2在服务机器上启动两个应用

说明:这里我的应用已经集成了Arthas,启动自动attach到服务,无需单独启动arthas去attach,
关于SpringBoot集成arthas参考https://javaessay.cn/pages/f6a4ce/#_1-%E5%88%9B%E5%BB%BAspringboot%E9%A1%B9%E7%9B%AE
通过IDEA直接启动或者通过下面脚本启动:

启动应用1

java -jar arthas-demo-0.0.1-SNAPSHOT.jar 

properties配置

server.port=8081
arthas.ip=127.0.0.1
arthas.http-port=8563
arthas.telnet-port=3658
arthas.agent-id=arthas_fire_1
arthas.tunnel-server=ws://127.0.0.1:7777/ws
arthas.outputPath=arthas-output
logging.config=classpath:log4j2.xml

启动应用2

java -jar arthas-demo-0.0.2-SNAPSHOT.jar 

properties配置

server.port=8082
arthas.ip=127.0.0.1
arthas.http-port=8564
arthas.telnet-port=3659
arthas.agent-id=arthas_fire_2
arthas.tunnel-server=ws://127.0.0.1:7777/ws
arthas.outputPath=arthas-output
logging.config=classpath:log4j2.xml

配置说明

  • arthas.agent-id :agentid,用于连接tunnel server ,不指定则自动生成的id即agentid,用于tunnel server连接

7.3连接

输入agentid,成功连接

7.4 通过Spring Boot的Endpoint查看agent节点

访问:http://60.205.187.137/actuator/arthas,需要登录

  • 用户名:arthas
  • 密码:即刚刚启动生成的密码

7.5查看所有应用

访问http://60.205.187.137:8080/apps.html

8基础命令

https://arthas.aliyun.com/doc/commands.html

help  查看命令帮助信息
cls   清空当前屏幕区域
session  查看当前会话的信息
reset  重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类
version  输出当前目标 Java 进程所加载的 Arthas 版本号
history  打印命令历史
quit   退出当前 Arthas 客户端,其他 Arthas 客户端不受影响
stop   关闭 Arthas 服务端,所有 Arthas 客户端全部退出
keymap   Arthas快捷键列表及自定义快捷键
dashboard   当前系统的实时数据面板
thread   查看当前 JVM 的线程堆栈信息
heapdump  类似jmap,只dump存活 --live
jad  查看源码
profiler 生成火焰图

参考:

官网:https://arthas.aliyun.com/en-us/

文档:https://arthas.aliyun.com/doc/

GitHub:https://github.com/alibaba/arthas

目录
相关文章
|
6月前
|
存储 监控 Cloud Native
阿里性能监控引擎建设之路
阿里巴巴智能引擎事业部自研的 Khronos 系统是阿里内部接入规模最大的性能数据存储引擎。Khronos 支持动态生命周期的存储计算分离架构,采用 schemaless 的 data model 设计,在万亿数据规模下为业务提供易用、高效、经济的服务,团队近期的优化工作也被国际学术会议CIKM2023收录。本⽂总结了Khronos 在性能监控领域遇到的技术挑战,以及在这个场景下的一些价值判断。
|
SQL 监控 Java
Java Spring Boot 2.0实战MyBatis连接池阿里Druid与SQL性能监控
阿里开源数据库连接池组件Druid非常强大,,本次课程一起学习如何在最新的Java Spring Boot 2.0和MyBatis系统中集成阿里开源的连接池Druid,以及SQL性能监控,生产环境必备利器。
73151 0
|
SQL druid Java
【直播预告】:Java Spring Boot开发实战系列课程【第14讲】:Spring Boot 2.0实战MyBatis连接池阿里Druid与SQL性能监控
阿里开源数据库连接池组件Druid非常强大,,本次课程一起学习如何在最新的Java Spring Boot 2.0和MyBatis系统 中集成阿里开源的连接池Druid,以及SQL性能监控,生产环境必备利器。
66443 0
|
2月前
|
缓存 监控 Unix
性能监控之 Linux 命令 top、vmstat、iostat、free、iftop 基础
【2月更文挑战第9天】性能监控之 Linux 命令 top、vmstat、iostat、free、iftop 基础
60 5
性能监控之 Linux 命令 top、vmstat、iostat、free、iftop 基础
|
5月前
|
监控 Linux
Linux 安装性能监控检测工具sysstat
Linux 安装性能监控检测工具sysstat
54 0
|
8月前
|
监控 Linux Shell
Linux 服务器 性能监控脚本
Linux 性能监控 shell 脚本
230 0
|
8月前
|
存储 监控 网络协议
[Linux命令]21个Linux常用命令(磁盘存储、性能监控和优化、网络和其他命令)(下)
[Linux命令]21个Linux常用命令(磁盘存储、性能监控和优化、网络和其他命令)(下)
|
8月前
|
存储 监控 网络协议
[Linux命令]21个Linux常用命令(磁盘存储、性能监控和优化、网络和其他命令)(上)
[Linux命令]21个Linux常用命令(磁盘存储、性能监控和优化、网络和其他命令)
|
9月前
|
缓存 监控 关系型数据库
Linux性能监控与调优工具
Linux性能监控与调优工具
158 0
|
存储 监控 Shell
Linux 性能监控之CPU&内存&I/O监控Shell脚本2
Linux 性能监控之CPU&内存&I/O监控Shell脚本2
433 0