龙空技术网

Java问题性能优化分析工具介绍(二) Arthas(阿尔萨斯)

小G说 235

前言:

现时你们对“阿里arthas官网”大概比较关怀,看官们都需要分析一些“阿里arthas官网”的相关内容。那么小编也在网摘上汇集了一些对于“阿里arthas官网””的相关内容,希望大家能喜欢,看官们快快来了解一下吧!

在没有Arthas之前,我一直用各种工具加Btrace来分析线上问题,但Btrace由于JDK版本问题,现在都很少用了,前段时间给团队推荐了阿里的Arthas,感觉真的是好用,这儿推荐给大家试试。

官网:

Demo:

注解源码:

教程:;id=arthas-basics

1、快速安装

下载arthas-boot.jar,然后用java -jar的方式启动

2、Linux/Unix/Mac 一键安装

一键安装:curl -L | sh

执行./as.sh,就会进入交互界面

3、快速入门

Arthas目前支持Web Console,用户在attach成功之后,可以直接访问:

可以填入IP,远程连接其它机器上的arthas。

4、查看help

5、jvm相关 —— dashboard (总览)

6、jvm相关 —— thread (显示线程信息)

7、jvm相关 —— jvm (显示目标JVM信息)

8、jvm相关 —— sysprop (显示并更改系统属性)

9、jvm相关 —— sysenv (显示系统环境)

10、class/classloader相关—— sc(搜索JVM加载的所有类)

11、class/classloader相关 —— jad (反编译类)

12、classloader相关 —— classloader (显示类加载器信息)

13、monitor (监视方法执行统计)

14、watch (显示指定方法调用的输入/输出参数)

15、trace (跟踪指定方法调用的执行时间)

16、stack (显示指定类和方法的堆栈跟踪)

17、Arthas 排查案例

下载demo-arthas-spring-boot.jar,再用java -jar命令启动

案例1:排查函数调用异常

watch com.example.demo.arthas.user.UserController * '{params, throwExp}' -x 2

当异常时捕获:watch com.example.demo.arthas.user.UserController * "{params[0],throwExp}" –e

按照耗时进行过滤:watch com.example.demo.arthas.user.UserController * '{params, returnObj}' '#cost>200'

案例2:热更新代码(通过 jad/sc/mc/redefine 命令实现动态更新代码的功能)

1.反编译:jad --source-only com.example.demo.arthas.user.UserController > D:\\UserController.java

jad --source-only com.example.demo.arthas.user.UserController > /data/expense-api/arthas/UserController.java

2.编辑UserController.java:return new User(id, "name" + id);

3.sc查找加载UserController的ClassLoader:sc -d *UserController | grep classLoaderHash

4.mc(Memory Compiler)命令来编译,并且通过 -c 参数指定ClassLoader,这一步生成 .class 字节码文件

mc -c 18b4aac2 D:\\UserController.java -d D:\\

mc -c 1be6f5c3 /data/expense-api/arthas/UserController.java -d /data/expense-api/arthas

5.使用redefine命令重新加载新编译好的 UserController.class

redefine D:\\com\\example\\demo\\arthas\\user\\UserController.class

redefine /data/expense-api/arthas/com/example/demo/arthas/user/UserController.class

案例3:排查HTTP请求返回404

访问:,我们想看一下到底是哪个Servlet处理了这个请求,返回了404?

跟踪所有的Servlet函数:trace javax.servlet.Servlet * > D:\\servlet.txt

案例4:动态更新应用 Logger Level

1.查找UserController 的 ClassLoader :sc -d com.example.demo.arthas.user.UserController | grep classLoaderHash

2.用ognl获取logger : ognl -c 1be6f5c3 '@com.example.demo.arthas.user.UserController@logger’

3.单独设置 UserController 的 logger level :

ognl -c 1be6f5c3 '@com.example.demo.arthas.user.UserController@logger.setLevel(@ch.qos.logback.classic.Level@DEBUG)’

4.修改logback的全局logger level,通过获取root logger,可以修改全局的logger level

ognl -c 1be6f5c3 '@org.slf4j.LoggerFactory@getLogger("root").setLevel(@ch.qos.logback.classic.Level@DEBUG)'

阿里这个工具在线上问题上,真的是很牛逼。

(线上问题系列一)百万并发的Kafka也有性能问题?

(线上问题系列二)JVM GC 自适应调节策略引起的问题

(线上问题系列三)记录一次线上Redis性能优化

(线上问题系列四)网络故障或换磁盘引起kafka客户端消费问题

(线上问题系列五)Kafka BUG引起的Tomcat线程池性能问题

(线上问题系列六)从一张Java报错图片说知识

Java问题性能优化分析工具介绍(一) XXFOX

Java web 优化基本方法(PPT)

标签: #阿里arthas官网