下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、性能测试如何定位瓶颈?看高手如何快速排查问题当线上碰到头疼的问题时,还在对着代码一行行的看?真的不太时髦了啊喂俗话说的好 “问题排查不用愁, Arthas 来帮您忙。”今天就来说说这个让妈妈再也不用担心我排查问题的Java 诊断神器 Arthas!什么是 Arthas ?Arthas? 是一款开源在线诊断工具,采用命令行交互模式,支持web 端在线诊断,同时提供丰富的Tab 自动补全功能,进一步方便进行问题的定位和诊断。这是一款开源一年多 GitHub star 2 万, 99% 的阿里研发小哥都在用的Java 终极诊断利器!相对比直接下载使用,我推荐开发者可以试一下通过IDE 插件 Clou
2、d Toolkit 中使用 Arthas 来实现一键远程诊断功能。得益于 Arthas 强大且丰富的功能,让Arthas 能做的事情超乎想象。下面仅仅列举几项常见的使用情况,更多的使用场景可以在熟悉了Arthas 之后自行探索。是否有一个全局视角来查看系统的运行状况?为什么 CPU 又升高了,到底是哪里占用了CPU ?运行的多线程有死锁吗?有阻塞吗?程序运行耗时很长,是哪里耗时比较长呢?如何监测呢?这个类从哪个jar 包加载的?为什么会报各种类相关的Exception ?我改的代码为什么没有执行到?难道是我没commit ?分支搞错了?遇到问题无法在线上debug ,难道只能通过加日志再重新发
3、布吗?有什么办法可以监控到JVM 的实时运行状态?Arthas 的命令、功能在其官方文档有详细介绍,下文将介绍一下近期几个使用场景。场景1:定位压测时的性能瓶颈平时服务器请求都很正常。压测时,依赖的服务、数据库也都没有到达瓶颈,但是机 器的CPU全部飘红,why ?通过jstack命令,只能看到某一时刻的堆栈,没有抓到真凶。thread查看当前线程信息,查看线程的堆栈。thread -n 3 -i 10000可以统计10秒内最忙的3个线程,并且打印它们的堆栈,很容易发现问题。最终发现的问题比较简单:日志中打印了?location?的信息,包括类名、方法名和行号。动态获取代码的方法名、行号等信息
4、,通常是通过?new Throwable()-> 打印->拆分字符串获取类、方法、行Throwable 的堆栈-> 截取堆栈中最顶层的业务代码 号等信息,打印堆栈对性能损耗是比较大的。$ thpeed f 3*HSF B u Process or - Dt FWJL T- 8 -1 bread -19' Id-601 cpyUuge -ldX RUNNAMEst java - lafte- ThrgwgbleEetStackT(Native MethodAt jnv甘.Lang.1 hr»a»get如rstaekfracefThfom删烧JwrB2
5、7)-locked java.b.aF|g.Throwabl«.get&tackTrHeifIhrwab'lB. :816)At cfi.qos.iGgbAck.classie.spi.CallerOataextrKt(CalLtrOnitd.6)t thqcs, 1。的c 1 j, Epi. L daglfiEE mu nt, g单tt / 1rtut * (L。晶 l力区任期即 t. J7”,:25*1场景2 :检测偶发的超时有段时间,总是碰到几次偶尔的超时,但是看日志都正常,鹰眼的调用链路都完全ok ,没有哪一步数据库操作或者HSF调用是特别慢的。各种监控统计的
6、时间维度的耗时,都十分正常,无法找到那个?rt?的尖刺。想到了可能是日志的问题,但是没有证据支撑。trace命令能监控每一步的耗时,并且可以配合条件表达式,当耗时超过xx ms时打印详细日志。找台机器,输入命令,后面的就是静等了。再次出现rt尖刺时,能够捕捉到耗时的分布情况。通过Arthas 拿到的结果,定位到是日志打印的问题。同步日志改为异步日志后,问 题解决。场景3 debug ?那要是动态字节码生成咋办?之前碰到过一个json序列化时输出的数字带不带引号的问题。当时各种 debug、 看代码,发现是通过ASM动态字节码的方式生成的序列化类。到这完全放弃了,debug已经无法定位问题了。当
7、时通过另外一种方式避免了这种问题。反过来看这个问题的时候,我们可以通过Arthas的jad命令,反编译动态字节码生成的类,结合 watch等命令,定位排查问题。还可以通过 mc(menory compiler), redefine?命令线上热更新代码,欢迎探索。有了这些能力就算万能了?不不,接着往下看。场景4做点坏事在问题排查过程中,发现了日志输出到了控制台,这个对性能的损耗是比较大的。有什么办法,在不发布的情况下紧急解决它?首先找到对应的 classsc -d ch.qos.logback.core.ConsoleAppenderclass-info ch.qos.logback.core.
8、ConsoleAppendercode-source/home/admin/lib/logback-core-1.2.3.jarnamech.qos.logback.core.ConsoleAppenderisInterface falsefalseisAnnotationfalseisEnumfalseisAnonymousClass falseisArrayisLocalClassfalseisMemberClassfalseisPrimitivefalseisSyntheticfalsesimple-nameConsoleAppenderpublicsuper-classmodifier
9、annotationinterfaces+-ch.qos.logback.core.OutputStreamAppender+-ch.qos.logback.core.UnsynchronizedAppenderBase+-ch.qos.logback.core.spi.ContextAwareBase+-java.lang.Objectclass-loader +-com.taobao.LaunchedURLClassLoader58dad04a+-sun.misc.Launcher$AppClassLoader18b4aac2+-sun.misc.Launcher$ExtClassLoad
10、er58ceff1classLoaderHash5f205aa然后获取class的属性信息,找到 appender 列表ognl -c 5f205aa 'org.slf4j.LoggerFactorygetLogger("root").aai.appenderList删除标准输出的 appender1ognl -c 5f205aaorg.slf4j.LoggerFactorygetLogger("root").aai.appenderList.remove(0)'神器:火焰图排查性能问题的时候,还有一个神器:火焰图通过火焰图,很清晰的看到一段时间内,对每个方法耗时的统计。开始使用 Arthas方式一:通过Cloud Toolkit 实现Arthas 一键远程诊断Cloud Toolkit是阿里发布的免费本地IDE插件,帮助开发者更高效地开发、测试、诊断并部署应用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025 学年成都市小学五年级美术期中模拟试卷及答案
- 高中语文必修上册同步练习 含答案3.2哦,香雪
- 2025年高考物理文化试题及答案
- 江西省2025年公务员考试行测真题解析卷
- 2025年沈阳水务招聘试题及答案
- 2025年化学安全常识试题及答案
- 2025年二甲评审院感应知应会试题及答案(共200题)
- 湖北省公务员2025年行测判断推理冲刺卷
- 2025年初中二年级道德与法治上学期法律常识试卷
- 2025年商业综合体租赁代理合同
- 搅拌车作业安全管理制度
- 生产安全生产事故案例
- 2025护理教学计划
- 2025至2030中国废铅行业发展趋势分析与未来投资战略咨询研究报告
- 网点负责人考试题库考点
- 2025年呼和浩特天骄航空有限公司招聘笔试冲刺题(带答案解析)
- 结直肠癌导致急性肠梗阻外科治疗中国专家共识(2025版)课件
- 辅助改方时方向继电器电路识读穆中华60课件
- 东方航空民航招飞面试常见问题及答案
- 英语第二册(五年制高职) 课件 Unit5 Social Rules
- 2025年三方询价单合同模板
评论
0/150
提交评论