性能优化与压测引擎三:性能优化利器arthas

  • 性能优化利器arthas
  • 简单使用
  • 网页版
  • Tunnel网页版


性能优化利器arthas

这个应该不陌生吧,阿里开源的,用于做性能优化和问题排查的,具体就不介绍了,可以看下这个学习文档很关键,基本所有问题都可用这个来解决,其实做性能检测的还有其他的一些工具,比如JvisulvmJprofile,都是可视化的工具,可用看CPU,看GC,看堆内堆外等信息,特别是Jprofile的功能更强大,可用看mysql数据库没个链接的信息,以及每个sql的调用信息,有兴趣的可以学习下,Jprofile学习连接,这个挺好的,线程栈和耗时都有。当然这些工具很好,但是都有一定的局限性,如果你服务器不允许外部的软件连接进来的话,就没戏啦,但是你可以安装arthas,可以通过命令或者网页进行使用。

简单使用

首先先下载,我这里下载的是全量的:

arthas分析 cpu 100 的 kafka_java


然后解压开:

arthas分析 cpu 100 的 kafka_java_02

在当前目录打开cmd,然后用命令java -jar arthas-boot.jar

arthas分析 cpu 100 的 kafka_开发语言_03

选择你要监控的哪个进程,比如我自己的例子就是4

arthas分析 cpu 100 的 kafka_压测系统_04

最常用的就是dashboard,定时刷新的仪表盘信息,有线程状态和gc等信息:

arthas分析 cpu 100 的 kafka_arthas_05

另外就是看线程状态thread,可以帮助排查问题:

arthas分析 cpu 100 的 kafka_压测系统_06


当然其他还有很多,比如你想看自己修改的代码是否真的打包进来了,可以用jad 后面跟类全限定名:

arthas分析 cpu 100 的 kafka_性能优化_07


直接可以看到反编译的源码,可以看到类加载器,位置,源码:

arthas分析 cpu 100 的 kafka_arthas_08


当然还有好多强大的功能,比如监听某个方法,看输入输出异常,看耗时等等,具体的可以看文档,都有,有兴趣可以自己玩玩,百度相关的教程也很多,我就不啰嗦了。

网页版

其实默认还有个网页版的http://localhost:8563/,这个很方便,不需要登录后台服务器了:

arthas分析 cpu 100 的 kafka_压测系统_09

Tunnel网页版

这个其实就是将多个arthas实例整合了,注册到一个地方,然后根据不同的id可以进行使用,这个是需要下载另外一个包:

arthas分析 cpu 100 的 kafka_性能优化_10


也用相同方法起起来:

arthas分析 cpu 100 的 kafka_arthas_11


也是一个springboot应用,默认web8080,还有个arthas实例通信的端口是7777

arthas分析 cpu 100 的 kafka_压测系统_12


然后看到这样的页面,有个AgentId是空的,简单可以理解为这个就是arthas实例id

arthas分析 cpu 100 的 kafka_arthas_13


然后你可以开启一个arthas实例连接进去,但是要指定参数**–tunnel-server ws://127.0.0.1:7777/ws**:

arthas分析 cpu 100 的 kafka_压测系统_14


没有看到一个id,这个说明没连接成功,为什么呢,因为前面已经用普通的启动过了,是有session存留的,应该用stop停止arthas,而不是q出来,我们可以看到session

arthas分析 cpu 100 的 kafka_arthas_15


然后用stop

arthas分析 cpu 100 的 kafka_性能优化_16


再启动就有了:

arthas分析 cpu 100 的 kafka_arthas_17


连接上了:

arthas分析 cpu 100 的 kafka_java_18


复制X5JIV7MBC1E7IREKLRO6web上,点连接即可:

arthas分析 cpu 100 的 kafka_arthas_19


arthas分析 cpu 100 的 kafka_java_20


主要是多个的时候可以方便切换,我再开个,其实这个id也可以指定,当然在运行的时候可能被提示端口占用,就按他的提示来换个即可:

arthas分析 cpu 100 的 kafka_java_21


这次我监听的是进程2,可以看到id就是我自己定义的:

arthas分析 cpu 100 的 kafka_arthas_22


然后去web上线断开连接,然后输入id后再连接:

arthas分析 cpu 100 的 kafka_java_23


是不是挺方便的,你搞个2个页签就可以了,然后可以同时监控2个进程:

arthas分析 cpu 100 的 kafka_性能优化_24


arthas分析 cpu 100 的 kafka_arthas_25


arthas分析 cpu 100 的 kafka_性能优化_26

不用去服务器上来回切了,很方便吧,其实我加工的压测系统就是把这个给嵌入了,所以就是压测性能优化一体,后面会放出来,我觉得用起来很方便,后面有机会会进行相关的源码分析,这个东西我是怎么加工的。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。