【随笔记】JAVA线上问题定位,JVM诊断神器Arthas

【随笔记】JAVA线上问题定位,JVM诊断神器Arthas

线上或者线下遇到Java相关问题,例如CPU升高,内存升高等问题不是很好处理,通常都是jps、jstack、jmap去定位,有条件一点的可以安装jprofile,但都不是很理想。现在可以使用Arthas进行定位,及时、有效。

1.Arthas

这个是Alibaba开源的java诊断工具。

开源地址:https://github.com/alibaba/arthas

官方文档:*https://alibaba.github.io/arthas

2.安装Arthas

这里有两种方式,一种是在服务器上安装它的启动程序,在本机进行查看,另一种是与自身项目重合,通过远程的方式查看。

2.1 本机安装
# github下载
wget https://alibaba.github.io/arthas/arthas-boot.jar
# 或者 Gitee 下载
wget https://arthas.gitee.io/arthas-boot.jar
# 打印帮助信息
java -jar arthas-boot.jar -h
2.2 本机运行

这里本机运行的话,需要选择要检测的java进程,如果本机没有任何java进程会自动退出。

java -jar D:\arthas-boot.jar
[INFO] arthas-boot version: 3.5.3
[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
* [1]: 8132 .\bxWebservice.jar
1

在这里插入图片描述

我这里本机提前启动了一个java进程,这里的列表有1个,根据提示输入【】中的序号即可。

还有一种方式,就是你提前已经知道了要监控的java进程pid

java -jar arthas-boot.jar [PID]
2.3 整合项目后运行

与springboot项目整合非常简单

在java工程的pom文件中增加依赖

<dependency>
			<groupId>com.taobao.arthas</groupId>
			<artifactId>arthas-spring-boot-starter</artifactId>
			<version>3.5.5</version>
		</dependency>

在springboot的配置文件中,bootstrap增加配置项

arthas.agent-id=arthas-id-服务名
arthas.tunnel-server=ws://arthas web console ip:arthas web console prot/ws
下载部署arthas tunnel server

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

Arthas tunnel server是一个spring boot fat jar应用,直接java -jar启动:

java -jar  arthas-tunnel-server.jar

默认情况下,arthas tunnel server的web端口是8080,arthas agent连接的端口是7777

启动之后,可以访问 http://127.0.0.1:8080/ ,再通过agentId连接到已注册的arthas agent上。

通过Spring Boot的Endpoint,可以查看到具体的连接信息: http://127.0.0.1:8080/actuator/arthas ,登陆用户名是arthas,密码在arthas tunnel server的日志里可以找到,比如:

32851 [main] INFO  o.s.b.a.s.s.UserDetailsServiceAutoConfiguration

Using generated security password: f1dca050-3777-48f4-a577-6367e55a78a2
启动arthas时连接到tunnel server

在启动arthas,可以传递--tunnel-server参数,比如:

as.sh --tunnel-server 'ws://127.0.0.1:7777/ws'

也可以使用下面的测试地址(不保证一直可用):

as.sh --tunnel-server 'ws://47.75.156.201:80/ws'
  • 如果有特殊需求,可以通过--agent-id参数里指定agentId。默认情况下,会生成随机ID。

attach成功之后,会打印出agentId,比如:

  ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.
 /  O  \ |  .--. ''--.  .--'|  '--'  | /  O  \ '   .-'
|  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.
|  | |  ||  |\  \    |  |   |  |  |  ||  | |  |.-'    |
`--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'
 
wiki      https://arthas.aliyun.com/doc
tutorials https://arthas.aliyun.com/doc/arthas-tutorials.html
version   3.1.2
pid       86183
time      2019-08-30 15:40:53
id        URJZ5L48RPBR2ALI5K4V

如果是启动时没有连接到 tunnel server,也可以在后续自动重连成功之后,通过 session命令来获取 agentId:

[arthas@86183]$ session
 Name           Value
-----------------------------------------------------
 JAVA_PID       86183
 SESSION_ID     f7273eb5-e7b0-4a00-bc5b-3fe55d741882
 AGENT_ID       URJZ5L48RPBR2ALI5K4V
 TUNNEL_SERVER  ws://47.75.156.201:80/ws

以上面的为例,在浏览器里访问 http://47.75.156.201/arthas/?port=80 ,输入 agentId,就可以连接到本机上的arthas了。

2.4 IDEA插件集成
  • Jetbrains 插件获取地址: https://plugins.jetbrains.com/plugin/13581-arthas-idea
  • 使用文档:https://www.yuque.com/arthas-idea-plugin
  • 源码地址: https://github.com/WangJi92/arthas-idea-plugin
2.5 控制台信息(web console)

在这里插入图片描述

目前支持web console的,也可以在刚刚启动的终端中进行操作,也可以在本机访问127.0.0.1:8563进入web console信息查看。

这个控制台上面的IP 和 PORT是可以进行设置的,与项目整合后,可以使用远程服务,即这里可以远程检测机,不需要登录检测机上了,很方便。

2.6 Arhas常用的操作命令
命令介绍
dashboard当前系统的实时数据面板
thread查看当前 JVM 的线程堆栈信息
watch方法执行数据观测
trace方法内部调用路径,并输出方法路径上的每个节点上耗时
stack输出当前方法被调用的调用路径
tt方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
monitor方法执行监控
jvm查看当前 JVM 信息
vmoption查看,更新 JVM 诊断相关的参数
sc查看 JVM 已加载的类信息
sm查看已加载类的方法信息
jad反编译指定已加载类的源码
classloader查看 classloader 的继承树,urls,类加载信息
heapdump类似 jmap 命令的 heap dump 功能
2.7 退出

如果只是退出当前的连接,可以用quit或者exit命令。Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。

如果想完全退出arthas,可以执行stop命令。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值