什么是 Arthas?

Arthas 是一款开源在线诊断工具,采用命令行交互模式,支持 web 端在线诊断,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。这是一款开源一年多 GitHub star 2 万,99% 的阿里研发小哥都在用的 Java 终极诊断利器!相对比直接下载使用,我推荐开发者可以试一下通过 IDE插件 Cloud Toolkit 中使用Arthas 来实现一键远程诊断功能。

得益于 Arthas 强大且丰富的功能,让 Arthas 能做的事情超乎想象。下面仅仅列举几项常见的使用情况,更多的使用场景可以在熟悉了 Arthas 之后自行探索。

  • 是否有一个全局视角来查看系统的运行状况?
  • 为什么 CPU 又升高了,到底是哪里占用了 CPU ?
  • 运行的多线程有死锁吗?有阻塞吗?
  • 程序运行耗时很长,是哪里耗时比较长呢?如何监测呢?
  • 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  • 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  • 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  • 有什么办法可以监控到 JVM 的实时运行状态?

Arthas 的命令、功能在其官方文档有详细介绍,下文将介绍一下近期几个使用场景。

场景 1:定位压测时的性能瓶颈

平时服务器请求都很正常。压测时,依赖的服务、数据库也都没有到达瓶颈,但是机器的 CPU 全部飘红,why?

通过 jstack 命令,只能看到某一时刻的堆栈,没有抓到真凶。

thread 查看当前线程信息,查看线程的堆栈。

thread -n 3 -i 10000 可以统计 10 秒内最忙的 3 个线程,并且打印它们的堆栈,很容易发现问题。最终发现的问题比较简单:日志中打印了 location 的信息,包括 类名、方法名和行号。

动态获取代码的方法名、行号等信息,通常是通过 new Throwable() -> 打印 Throwable 的堆栈 -> 截取堆栈中最顶层的业务代码 -> 拆分字符串获取类、方法、行号等信息, 打印堆栈对性能损耗是比较大的。

场景 2:检测偶发的超时

有段时间,总是碰到几次偶尔的超时,但是看日志都正常,鹰眼的调用链路都完全 ok,没有哪一步数据库操作或者 HSF 调用是特别慢的。

各种监控统计的时间维度的耗时,都十分正常,无法找到那个 rt 的尖刺。

想到了可能是日志的问题,但是没有证据支撑。

trace 命令能监控每一步的耗时,并且可以配合条件表达式,当耗时超过 xx ms 时打印详细日志。

找台机器,输入命令,后面的就是静等了。再次出现 rt 尖刺时,能够捕捉到耗时的分布情况。

通过 Arthas 拿到的结果,定位到是日志打印的问题。同步日志改为异步日志后,问题解决。

场景3:debug?那要是动态字节码生成咋办?

之前碰到过一个 json 序列化时输出的数字带不带引号的问题。当时各种 debug、看代码,发现是通过 ASM 动态字节码的方式生成的序列化类。到这完全放弃了,debug 已经无法定位问题了。当时通过另外一种方式避免了这种问题。

反过来看这个问题的时候,我们可以通过 Arthas 的 jad 命令,反编译动态字节码生成的类,结合 watch 等命令,定位排查问题。

jad——反编译指定已加载类的源码

还可以通过 mc(menory compiler), redefine 命令线上热更新代码,欢迎探索。

总结

本文从基础到高级再到实战,由浅入深,把MySQL讲的清清楚楚,明明白白,这应该是我目前为止看到过最好的有关MySQL的学习笔记了,我相信如果你把这份笔记认真看完后,无论是工作中碰到的问题还是被面试官问到的问题都能迎刃而解!

重要的事:需要领取完整版的MySQL学习笔记的话,请转发+关注后点这里免费获取到免费的下载方式!

MySQL50道高频面试题整理:

ocs.qq.com/doc/DSmxTbFJ1cmN1R2dB)到免费的下载方式!**

MySQL50道高频面试题整理:

java安卓破解版游戏下载,再不刷题就晚了!相关推荐

  1. Java取模函数,再不刷题就晚了!

    数据库 2.1 池化技术:如何减少频繁创建数据库连接的性能损耗? 2.2 数据库优化方案(一):查询请求增加时,如何做主从分离? 2.3 数据库优化方案(二):写入数据量增加时,如何实现分库分表? 2 ...

  2. java捕鱼增值版游戏下载_捕鱼游戏 java

    a. base: conf配置服务器 自己所要使用的服务器的properties--rabbitmq客户端修改用户名和密码 eureka 服务注册和发现作用 b. zipkin + sleuth 追踪 ...

  3. 学习安卓开发!我凭什么拿到了阿里、腾讯、今日头条3家大厂offer?再不刷题就晚了!

    前言 2020年是转折的一年,上半年疫情原因,很多学android开发的小伙伴失业了,虽找到了一份工作,但高不成低不就,下半年金九银十有想法更换一份工作,很多需要大厂面试经验和大厂面试真题的小伙伴,想 ...

  4. apm性能监控系统,字节跳动Android三面凉凉,再不刷题就晚了!

    前言 今天来跟大家分享TIM最强保活思路的几种实现方法.这篇文章我将通过ioctl跟binder驱动交互,实现以最快的方式唤醒新的保活服务,最大程度防止保活失败.同时,我也将跟您分享,我是怎么做到在不 ...

  5. android电视!Android多进程从头讲到尾,再不刷题就晚了!

    前言 最近我开始偷偷投简历了.与老东家的合同快要到期,想知道自己的斤两,续签合同也好有个底,顺便悄悄看看新的工作机会.虽然市场环境不好,但我们身在涨工资靠跳槽的行业没办法. 由于工作了5年了,经验有了 ...

  6. 知乎上已获千赞,再不刷题就晚了!

    食用指南 和大部分人一样,我在复习完第一遍Android知识的情况下,看到相关的知识回答的仍然不能够令自己满意. 在第二遍系统复习的时候,我着重记住每个知识点的关键字,根据这些关键字拼凑出大概的知识点 ...

  7. 资深Android开发带你入门Framework,再不刷题就晚了!

    想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样. 本文参考了目前大部分 Android 应用启动优化的方案,将大家的方案做一个汇总,如果你有这方 ...

  8. android计步器!30岁以后搞Android已经没有前途?再不刷题就晚了!

    前言 近日,字节跳动正式启动了2021届秋季校园招聘,为应届毕业生开放超过6000个工作岗位.这一数字超过了该公司往年秋招规模,并与其今年春招规模持平.全年校招人数共计超过1万2千人,远高于同类型互联 ...

  9. app保活面试题,Android动态换肤实现原理解析,再不刷题就晚了!

    前言 近期被两则消息刷屏,[字节跳动持续大规模招聘,全年校招超过1万人][腾讯有史以来最大规模的校招启动]当然Android岗位也包含在内,因此Android还是有很多机会的.结合往期面试的同学(主要 ...

最新文章

  1. Myeclipse的破解步骤
  2. 玩斗地主明白的7个道理
  3. 计算机硬件Word,[计算机硬件及网络]word的操作.doc
  4. vue组件调用(用npm安装)
  5. 使用Java 8进行分组,转换和归约
  6. jQuery的AJAX常用属性及解释
  7. 信息管理系统界面html_西宁市小升初信息管理系统http://221.207.8.71/
  8. python break和continue语句
  9. html空格暂停,关于audio标签暂停的问题
  10. 平凡而又神奇的贝叶斯方法(转)
  11. 内蒙古工业大学计算机好调剂吗,内蒙古工业大学信息工程学院2017硕士研究生第三次调剂公告...
  12. 推荐 OS X 下最方便实用的六款解压缩软件
  13. 在quill编辑器中集成秀米和135编辑器
  14. 计算机学业水平测试初中生操作题,高二计算机学业水平测试——excel操作题
  15. python lazy_pinyin模块 isalpha函数
  16. Python基础入门:函数--阿里云天池
  17. 软件架构详解(附图)
  18. DLM分布式锁的实现机制
  19. 【写一个操作系统】2—VMware创建软盘映像
  20. android程序保活官方推荐

热门文章

  1. linux帝国cms建立目录不成功,帝国网站迁移建立目录不成功!请检查目录权限帝国CMS问题解决办法...
  2. 关于javascript中的(;),为可选的分号
  3. MySQL性能优化实战
  4. P1498 南蛮图腾(C++_递推)
  5. 基于java电力设备管理系统
  6. 【历史上的今天】9 月 19 日:世界上第一个表情符号;微软发布 Virtual PC;苹果 UI 扁平化的开始
  7. PaddleDetection目标检测之水果检测(上)(yolov3_mobilenet_v1)
  8. python二维码,条形码识别
  9. ajax牙椅aj11,AJ11拆解图 AJ11配置拆解测评
  10. php生成pdf水印,使用 PHP 在 PDF 文档中加水印并进行文档加密