应用诊断利器Arthas 3.0.5版本发布:提升全平台用户体验

简介: Arthas从9月份开源以来,受到广大Java开发者的支持,Github Star数三个月超过6000,非常感谢用户支持。同时用户给Arthas提出了很多建议,其中反映最多的是: 1. Windows平台用户体验不好 1. Attach的进程和最终连接的进程不一致 1. 某些环境下没有安装Telnet,不能连接到Arthas Server 1. 本地启动,不需要下载远程(很多公司安全考

Arthas从9月份开源以来,受到广大Java开发者的支持,Github Star数三个月超过6000,非常感谢用户支持。同时用户给Arthas提出了很多建议,其中反映最多的是:

  1. Windows平台用户体验不好
  2. Attach的进程和最终连接的进程不一致
  3. 某些环境下没有安装Telnet,不能连接到Arthas Server
  4. 本地启动,不需要下载远程(很多公司安全考虑)
  5. 下载速度慢(默认从maven central repository下载)

在Arthas 3.0.5版本里,我们在用户体验方面做了很多改进,下面逐一介绍。

全平台通用的arthas-boot

arthas-boot是新增加的支持全平台的启动器,Windows/Mac/Linux下使用体验一致。下载后,直接java -jar命令启动:

wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar

arthas-boot的功能比以前的as.sh更强大。

  • 比如下载速度比较慢,可以指定阿里云的镜像。

    java -jar arthas-boot.jar --repo-mirror aliyun --use-http
  • 比如可以通过session-timeout指定超时时间:

    java -jar arthas-boot.jar --session-timeout 3600
  • 更多的功能可以通过java -jar arthas-boot.jar -h查看

arthas-boot在attach成功之后,会启动一个java telent client去连接Arthas Server,用户没有安装telnet的情况下也可以正常使用。

优先使用当前目录的Arthas

在新版本里,默认会从arthas-boot.jaras.sh所在的目录下查找arthas home,这样子用户全量安装之后,不需要再从远程下载Arthas。

  • 用户可以更方便地集成到自己的基础镜像,或者docker镜像里
  • 对安全要求严格的公司,不用再担心从远程下载的问题

Attach之前先检测端口

在之前的版本里,用户困扰最多的是,明明选择了进程A,但是实际连接到的却是进程B。

原因是之前attach了进程B,没有执行shutdown,下次再执行时,还是连接到进程B。

在新版本里,做了改进:

  • 在attach之前,检测使用3658端口的进程
  • 在Attach时,如果端口和进程不匹配,会打印出ERROR信息
$ java -jar arthas-boot.jar
[INFO] Process 1680 already using port 3658
[INFO] Process 1680 already using port 8563
* [1]: 1680 Demo
  [2]: 35542
  [3]: 82334 Demo
3
[ERROR] Target process 82334 is not the process using port 3658, you will connect to an unexpected process.
[ERROR] If you still want to attach target process 82334, Try to set a different telnet port by using --telnet-port argument.
[ERROR] Or try to shutdown the process 1680 using the telnet port first.

更好的历史命令匹配功能

  • 新版本对键盘Up/Down有了更好的匹配机制,试用有惊喜:)

    比如执行了多次trace,但是在命令行输入 trace后,想不起来之前trace的具体类名,那么按`Up`,可以很轻松地匹配到之前的历史命令,不需要辛苦翻页。
    
  • 新版本增加了history命令

改进Web Console的体验

  • 改进对Windows的字体支持

    之前Windows下面使用的是非等宽字体,看起来很难受。新版本里统一为等宽字体。
  • 增大字体,不再伤害眼睛

image

新增sysenv命令

sysenv命令和sysprop类似,可以打印JVM的环境变量。

新增ognl命令

ognl命令提供了单独执行ognl脚本的功能。可以很方便调用各种代码。

比如执行多行表达式,赋值给临时变量,返回一个List:

$ ognl '#value1=@System@getProperty("java.home"), #value2=@System@getProperty("java.runtime.name"), {#value1, #value2}'
@ArrayList[
    @String[/opt/java/8.0.181-zulu/jre],
    @String[OpenJDK Runtime Environment],
]

watch命令打印耗时,更方便定位性能瓶颈

之前watch命令只支持打印入参返回值等,新版本同时打印出调用耗时,可以很方便定位性能瓶颈。

$ watch demo.MathGame primeFactors 'params[0]'
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 22 ms.
ts=2018-11-29 17:53:54; [cost=0.131383ms] result=@Integer[-387929024]
ts=2018-11-29 17:53:55; [cost=0.132368ms] result=@Integer[-1318275764]
ts=2018-11-29 17:53:56; [cost=0.496598ms] result=@Integer[76446257]
ts=2018-11-29 17:53:57; [cost=4.9617ms] result=@Integer[1853966253]

改进类搜索匹配功能,更好支持lambda和内部类

之前的版本里,在搜索lambda类时,或者反编绎lambda类有可能会失败。新版本做了修复。比如

$ jad Test
$$
Lambda$1/1406718218

ClassLoader:
+-sun.misc.Launcher$AppClassLoader@5c647e05
  +-sun.misc.Launcher$ExtClassLoader@3c1491ce

Location:
/tmp/classes

/*
 * Decompiled with CFR 0_132.
 *
 * Could not load the following classes:
 *  Test
 *  Test
$$
Lambda$1
 */
import java.lang.invoke.LambdaForm;
import java.util.function.Consumer;

final class Test
$$
Lambda$1
implements Consumer {
    private Test
$$
Lambda$1() {
    }

    @LambdaForm.Hidden
    public void accept(Object object) {
        Test.lambda$0((Integer)((Integer)object));
    }
}

更好的tab自动补全

改进了很多命令的tab自动补全功能,有停顿时,可以多按tab尝试下。

Release Note

详细的Release Note:https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.5

相关文章
|
1月前
|
开发工具 开发者
应用研发平台EMAS在接入崩溃分析、性能分析和远程日志的时候
【2月更文挑战第28天】应用研发平台EMAS在接入崩溃分析、性能分析和远程日志的时候
16 6
|
7月前
|
SQL 监控 搜索推荐
自动化测试平台V1.0版本正式上线啦!
自动化测试平台V1.0版本正式上线啦!
139 0
|
2月前
|
机器学习/深度学习 运维 监控
有人想让我讲讲应用性能管理(APM)工具
有人想让我讲讲应用性能管理(APM)工具
|
2月前
|
IDE 小程序 API
【社区每周】IDE性能分析工具即将上线;多项数字化产品支持沙箱调试(1月第三期)
【社区每周】IDE性能分析工具即将上线;多项数字化产品支持沙箱调试(1月第三期)
20 0
|
10月前
|
监控 安全 编译器
常用问题排查工具和分析神器,值得收藏
常用问题排查工具和分析神器,值得收藏
智能、高效、便捷问题定位利器 —— 应用诊断分析平台 ATP 上线
一款分析功能丰富、诊断能力完备的平台,帮助用户高效定位应用诊断性能、异常行为等问题。
智能、高效、便捷问题定位利器 —— 应用诊断分析平台 ATP 上线
|
Arthas Java 测试技术
56-微服务技术栈(高级):在线检测工具Arthas(下载安装)
开发者对于生产问题故障的排查、定位,随着微服务的喷发,也不再像是以前那边依赖纯日志、gc日志进行问题排查与定位了,本节开始介绍一个生产环境使用的排错工具Arthas,帮助大家更高效、便捷地实现生产问题排错。
188 0
|
Arthas 存储 运维
60-微服务技术栈(高级):在线检测工具Arthas(实现CPU排查与代码热更新)
线上代码经常会出现CPU占用过高的情况,按以往经验我会使用top指令,进一步借助于jstack去查看具体信息从而进行问题排查,但基本上都逃不过需要重新发包的局面,即使是一个增量包,应用也需要短暂停启。后来运维大兄弟让我试一下Arthas,说是可以进行代码的热更新操作,正好来试一下。
293 0
|
Arthas Java 测试技术
59-微服务技术栈(高级):在线检测工具Arthas(精准定位Java应用CPU负载过高)
开发者对于生产问题故障的排查、定位,随着微服务的喷发,也不再像是以前那边依赖纯日志、gc日志进行问题排查与定位了,本节开始介绍一个生产环境使用的排错工具Arthas,帮助大家更高效、便捷地实现生产问题排错。
224 0
|
Arthas 测试技术
《使用Arthas 抽丝剥茧深入应用-线上诊断利器之外》电子版地址
使用Arthas 抽丝剥茧深入应用-线上诊断利器之外
78 0
《使用Arthas 抽丝剥茧深入应用-线上诊断利器之外》电子版地址