学习arthas(十六)热点功能火焰图

arthas profiler提供了火焰图(Flame Graph)功能,可以帮助开发人员更直观地了解应用程序的性能瓶颈和调用链。profiler 命令支持生成应用热点的火焰图。本质上是通过使用 async-profiler不断的采样,然后把收集到的采样结果生成火焰图。 什么是火焰图(Flame Graph)? 火焰图是一种可视化工具,用于呈现函数调用栈的层级结构和执行时间的比例。它以一种直观的方式显示了程序中各个函数的执行时间和调用关系,能够帮助开发人员快速定位性能瓶颈所在并进行优化。不过需要注意,profiler模块在采集性能数据时会对应用造成一定的影响,建议在生产环境中谨慎使用。 如何生成火焰图? 使用arthas profiler生成火焰图的步骤如下: (1)启动arthas控制台,并连接到目标应用程序。 (2)执行profiler start命令,开始性能分析。 (3)让应用程序...

文章分类:经验分享 技术知识

Arthas

学习arthas(十五)无侵入的热部署

1.基本介绍 arthas提供了热部署功能,可以在不停止应用程序的情况下修改代码并立即生效。所以在前面也实践了它的诸多命令都是为在分析问题的原因上,若问题分析清除了,能够直接在不影响用户使用的前提下修正解决,就显得非常高端了。在arthas里提供了jad、mc、redefine、retransform几个命令专门可协同的作用于程序的热部署。 所谓的热部署是指在不重启Java应用程序进程的前提下覆盖现有的程序版本代码达到运行生效的目的,同时热部署也不是无脑的代码更新,通常像一些框架应用的配置文件的修改后不会被更新(一般框架对于配置文件只读取一次),修改了全局静态全局常量也基本不会生效,新增加的类和方法也不会生效,仅在修改了方法内部的代码会生效,当然了,对于无限循环的场景也不会生效。闲扯几句JRebel实在是太高端了,它可以支持新创建的类、新增加的方法、常量的修改、SpringBoot项目中的...

文章分类:经验分享 技术知识

Arthas

学习arthas(十四)方法执行时的时空隧道

很多时候有很多的问题由于不同的运行环境所在操作系统的不同,数据的不同,用户的不同等多种多样的因素存在,导致某些程序代码运行的有一些潜在问题,但这样的问题往往很难在线下开发测试环境去复现,导致一些问题的分析解决变得困难重重。 arthas的tt命令是方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测。watch 虽然很方便和灵活,但需要提前想清楚观察表达式的拼写,这对排查问题而言要求太高,因为很多时候我们并不清楚问题出自于何方,只能靠蛛丝马迹进行猜测。这个时候如果能记录下当时方法调用的所有入参和返回值、抛出的异常会对整个问题的思考与判断非常有帮助。于是乎,TimeTunnel 命令就诞生了————“对于一个最基本的使用来说,就是记录下当前方法的每次调用环境及请求与响应现场。” (1)监控某个类的某些方法,在监控的时间段内,输出存在的方法调用列表...

文章分类:经验分享 技术知识

Arthas

学习arthas(十三)监视代码的执行结果

arthas watch命令是arthas工具提供的一个命令,用于在应用运行过程中观察指定方法的执行情况,可以帮助开发人员实时监视指定类和方法的调用情况。可以方便地观察到指定方法的调用与执行情况,对于代码执行的:返回值、异常、入参、this等代码范围,通过OGNL表达式进行对应代码逻辑范围上执行的应用排查。 (1)监控一个类的一个方法,跟踪参数、this对象、返回值、异常信息 watchcn.chendd.blog.admin.blog.tag.controller.TagManageControllerqueryTagsPage --exclude-class-pattern*CGLIB*-x2{params,target,returnObj,throwExp}[objectObject] (2)监控方法调用超过 100 秒以上 watchcn.chendd.blog.admin.blo...

文章分类:经验分享 技术知识

Arthas

学习arthas(十二)跟踪方法代码的执行

1.基本介绍 trace命令是Arthas工具中的一个强大的命令,用于跟踪方法的执行情况。它可以帮助开发人员进行代码调试、性能分析和问题排查,是一个动态方法追踪命令,提供了一种跟踪方法参数和返回值、异常情况等的方法。trace 能方便的帮助你定位和发现因 RT 高而导致的性能问题缺陷,但其每次只能跟踪一级方法的调用链路,对一个方法内部的调用路径进行追踪,输出方法路径上每个子方法的调用耗时细节。 通过使用arthas trace命令,可以灵活地跟踪指定类和方法的执行情况,并结合选项进行更精细的控制。这对于调试和性能分析非常有帮助。需要注意的是arthas trace命令会对目标方法进行字节码增强,因此在使用完毕后,建议使用retransform命令恢复字节码,以避免对应用程序的性能造成影响。 trace命令可以对方法内部调用路径,并输出方法路径上的每个节点上耗时。trace 命令能主动搜索 ...

文章分类:经验分享 技术知识

Arthas

学习arthas(十一)输出方法调用栈

stack 命令用于查看指定类和方法的调用栈信息,即堆栈信息,包含方法调用链、堆栈深度等信息,用于追踪程序执行的调用路径,同时也可以帮助我们直观的查看某个类是怎么被调用执行的,特别是在分析一些开源项目的源码时,还是有一定的用武之地的。 1.基本介绍 调用栈信息包括每个线程的调用树,从最上层的方法开始,依次展示方法的调用关系。每个方法的信息包括类名、方法名、源码位置等。通常在方法抛出异常后,可以看到异常的堆栈信息,通过堆栈中异常的原因描述来定位异常所发生的位置和异常发生的原因,实际上对于正常运行的代码也是存在方法调用堆栈的,只不过通常情况下大家不会使用到,比如下列代码可获取到方法调用时的堆栈,参考如下: publicstaticvoidinfo(Stringmessage){ StackTraceElement[]stackTraceElements=Thread.currentThread...

文章分类:经验分享 技术知识

Arthas

学习arthas(十)方法执行结果监控

Arthas的monitor命令是其强大的监控功能之一,它可以帮助开发人员实时监控和分析一段时间段内Java应用程序的性能指标和方法调用情况,面向程序执行结果统计,命令属于异步定时反馈统计监控的结果,本文对于monitor命令做一个简单常用的实践。 1.基本用法 (1)monitor命令用于监控某个类的某些方法,类和方法名,都可以是完整的类名或通配符表达式; (2)监控参数选项有: -c:指定监控的周期,默认值为 120 秒。 -b:在方法调用之前计算 condition-express。若监控的条件有耗时时间,在调用之前计算条件表达式将会存在问题。 -E:开启正则表达式匹配,默认为通配符匹配。 2.应用场景 (1)性能优化:通过监控方法的执行时间和执行频率,可以发现应用程序中的性能瓶颈,从而进行针对性的优化。 (2)排查问题:当应用程序出现性能问题或异常情况时,可以使用monitor命令...

文章分类:经验分享 技术知识

Arthas

学习arthas(九)动态执行一些代码

所谓的执行一些代码主要是手工调用已有的一些被加载类的方法,并不是像JavaScript中的eval函数那么自由(本站深度研究过Apache Commons JCI项目可以动态的编译一些Java源代码为class,并加载它们来执行),本次主要使用arthas来执行一些已有的代码,这些代码并不一定是完整可调用的存在于某个方法,可能是需要多行自定义的方法,或者是单独新编写的,用于做一些补偿性的事情,比如某些原因导致的定时任务没有正常的执行,需要手工触发;再比如调用一些方法获取一些连接池的参数等等。 前面有使用`getstatic`和`ognl`分别做过一些实践,本次针对它们再次实践,属实是值得拥有。 1.getstatic实践 (1)通过 getstatic 命令可以方便的查看类的静态属性。使用方法为`getstatic class_name field_name`,推荐直接使用ognl命令,更...

文章分类:经验分享 技术知识

Arthas

学习arthas(八)查找某个被加载的类

1.基本介绍 有些时候查找某个被加载的类也是有必要的,当然抛出ClassNotFound异常的除外,特别是针对于需要改写一些第三方框架组件的源代码时,也许是因为源码中的实现不够理想,要么是需要做一些个性化的事情,通常我们的做法并不是去改写这些三方库的源代码jar,而是拷贝一份源代码放置于项目中的同包名同类名,再调整启动脚本优先加载项目内的classes或jar,而后再加载这些第三方的jar,使得预先加载的是项目中的代码(项目中修改过的代码)。所以,基本上有这几种场景是这么干过: (1)在使用Google的zxing生成二维码组件时,由于它默认生成的二维码带有一些宽度的白色边框(差不多10像素),如果需要取消白边,通常的做法就是改动源代码(本站有对于此问题的解决); (2)在使用第三方登录时(如:QQ、微博等)它们提供的SDK示例程序的参数都使用配置文件存储的,本站在实现时将这些配置文件存储...

文章分类:经验分享 技术知识

Arthas

学习arthas(七)arthas-tunnel-server的摸索

1.简单介绍 起初在下决心在开始摸索Arthas时,在GitHub的Release版本下载的链接里有一项名为“arthas-tunnel-server-3.7.1-fatjar.jar”的文件,尽管当初并不知道它是什么,作用是什么,仍然选择了实践arthas。随着实践的深入在掌握一些细节后也逐渐把这块东西的脉路给摸清楚了(非专业的浅见),我所理解arthas-tunnel-server的意思是一种arthas的server服务端,可单独作为arthas的中央服务器与各个项目连接,各个项目中内部集成arthas,无需额外再部署arthas,并以Web Console的方式在线访问,形成一种在线连接管理多个项目的集提继承,由各个项目自己提供arthas,arthas-tunnel-server负责请求命令转发交互。所以,此处奉上两个不专业的arthas应用部署结构图,参考如下: (单机应用结构...

文章分类:经验分享 技术知识

Arthas
本站信息

 运营时间: 天

 用户数量: 人

 文章数量: 篇

 评论数量: 条

 点赞个数: 个

 最后更新:

标签云