中原银行的 Arthas 技术实践分享

  • 案例一:健康码CPU高案例分析
  • 案例二:应用线程连接数异常
  • 总结

Arthas 是一款 Java 开源诊断工具,由于其强大的问题排查及诊断能力,自其开源以来广受开发者的关注和使用,多次登顶 GitHub Trending,并得到国内多家技术媒体的分享。

Arthas 可以通过简单的命令交互模式,接入运行的JVM,快速定位和诊断线上程序运行问题。在不重启服务的情况下,实时、动态的修改相关code,并实时生效。具体工作原理如下:

  1. 连接JVM:通过 attach 机制,使用 pid 连接正在运行的JVM;

  2. 查看及修改JVM字节码: 通过 instrument 技术对运行中的 JVM 附加或修改字节码来实现增强的逻辑。

中原银行技术团队于 2019 年初开始推广和使用 Arthas 定位和诊断线上问题。由于对系统平稳运行的严格要求及对客户敏感信息的保护,我们对arthas的部分功能进行了定制化改造,对watch、mc、redefine等命令进行了隐藏。

以下为我行在 arthas 技术实践中的一些案例分享(由于行内代码保密性要求,下文所示案例均为场景复现所写示例代码)

案例一:健康码CPU高案例分析

问题描述:业务人员反馈后台管理系统其中一个页面响应时间很长,登录服务器上发现CPU使用率较 高,达到80%左右。

1. thread命令查看CPU使用率高的线程

启动arthas,附加到对应的java进程,执行thread -n 5 查看CPU使用率最高的5个线程的堆栈。

2. 通过monitor命令查看方法的调用次数与耗时

通过thread命令已经定位到CPU主要消耗在TreeUtil的findMenuChildren方法上,通过monitor命令查看方法的具体调用次数与耗时

通过monitor命令可以明确该方法单次调用平均耗时为17 ~ 20ms,但是调用次数多,所以整体上页面响应慢。

3. 通过jad命令反编译TreeUtil类,查看源码


通过jad命令查看源码可以发现,此处的业务逻辑大致是通过ResourceTreeVo 对象的resourceParentId 字段把一个列表构建一个树。在findMenuChildren 方法中存在递归调用,而且每一次调用都需要遍历整个ResourceTreeVo 列表来查找子节点,时间复杂度为O(n2)。所以在ResourceTreeVo 列表元素比较多的时候,会很耗时。

4. 解决问题

定位到问题就方便解决了,可以通过提前基于list构建一个parentId->List的map,每个节点查找子节 点列表的时候可以从map中获取。这样整个构建树的时间算法为O(n)。

案例二:应用线程连接数异常

问题描述:服务器句柄数耗尽,查看发现某个应用占用句柄数较多。


1. thread命令查看线程信息

启动arthas,附加到对应的java进程,执行thread查看线程情况。
在这里插入图片描述



看到有大量的MasterListener-mymaster-* 线程处于连接状态,一直没有释放


发现这些线程是由redis.clients.JedisSentinelPool$ MasterListener 产生的,那么接下来就来查看一下JedisSentinelPool$MasterListener 的调用情况。

2. stack命令查看堆栈信息


触发一次应用请求,打印出如下堆栈信息


通过调用链定位到RedisUtil 类,发现每次请求否会触发RedisUtil.getJedis 方法调用
JedisSentinelPool$MasterListener ,那么下一步我们反编译一下REedisUtil 类。

3. jad命令反编译查看代码



查看getJedis 方法


发现getJedis 每调用一次都会新建一个JedisSentinelPool

通过分析发现,每次使用redis时,都会调用getJedis 方法创建一个新的JedisSentinelPool ,从而启动一个MasterListener-mymaster-* 线程,由于该线程会一直保持监听,不会自动释放,故随着应用请求的增加线程数一直增加从而导致连接数占满。

4. 解决问题

针对该问题,只需创建一个全局的JedisSentinelPool ,每次获取redis连接时都从该连接池获取即可,这里不再对代码进行展示。

总结

使用Arthas以前,线上问题排查往往需要查网络、jps、jstack、jmap、jhat、jstat、hprof 等一通操作,费时费力。而现在,大多数的常见问题都可以使用 Arthas 轻松定位,迅速解决。

当然,Arthas只是提供了各个维度的监控数据,具体问题排查依然靠人来进行分析,因此我们还是需要多多实践,多积累经验才能提高定位、解决问题的能力。

作者:于爽
指导老师:陈郓,王东,杨晓兵

版权归作者所有,任何形式转载请联系作者。
it_hr@zybank.com.cn

中原银行的 Arthas 技术实践分享相关推荐

  1. 传统银行业务的数字化转型-中原银行大数据建设实践

    在以"场景赋能·驱动有数"为主题的神策 2018 数据驱动大会现场,中原银行刘远东发表了名为<传统银行业务的数字化转型-中原银行大数据建设实践>的主题演讲,以下内容根据 ...

  2. 让互联网更快:新一代QUIC协议在腾讯的技术实践分享

    本文来自腾讯资深研发工程师罗成在InfoQ的技术分享. 1.前言 如果:你的 App,在不需要任何修改的情况下就能提升 15% 以上的访问速度,特别是弱网络的时候能够提升 20% 以上的访问速度. 如 ...

  3. 线下沙龙 | 5月11日 ,百度智能云网络技术实践分享强势来袭!

    云计算经过了十余年的发展,逐渐成为了我们个人和商业生活中不可或缺的组成部分.早期,云技术只是一个新鲜的词汇,而如今,随着全球云计算领域的活跃创新和我国云计算发展进入应用普及阶段,简单的云资源池之间的互 ...

  4. 云上拍客梨视频 基于阿里云的技术实践分享

    摘要: 梨视频大部分的业务都选择了阿里云,其中一个主要原因是阿里云提供基于钉钉群构建的24贴身技术支持,刘隽表示,这种服务模式可以更充分.高效的对接需求,快速得到反馈,这也让梨视频的同学有信心去尝试一 ...

  5. WebP 在减少图片体积和流量上的效果如何?—— WebP 技术实践分享

    作者 | Jackson 编辑 | 尾尾 不论是 PC 还是移动端,图片一直占据着页面流量的大头,在图片的大小和质量之间如何权衡,成为了长期困扰开发者们的问题.而 WebP 技术的出现,为解决该问题提 ...

  6. WebP 在减少图片体积和流量上的效果如何?MIP技术实践分享

    作者 | Jackson 编辑 | 尾尾 不论是 PC 还是移动端,图片一直占据着页面流量的大头,在图片的大小和质量之间如何权衡,成为了长期困扰开发者们的问题.而 WebP 技术的出现,为解决该问题提 ...

  7. WebP 在减少图片体积和流量上的效果如何?WebP 技术实践分享

    作者 | Jackson 编辑 | 尾尾 不论是 PC 还是移动端,图片一直占据着页面流量的大头,在图片的大小和质量之间如何权衡,成为了长期困扰开发者们的问题.而 WebP技术的出现,为解决该问题提供 ...

  8. 北京弘易信泰 网络数据抓取技术实践分享

    弘易信泰,作为大数据产品厂商,长期关注业界数据抓取技术的变化,当前,互联网数据以前所未有的态势迅猛增长,对于信息化技术而言,海量数据的抓取技术尤为重要,在数据迅速发展的大背景下,中国政府与企业类型的信 ...

  9. 共享经济模式下的边缘计算——PPIO边缘云 laaS技术实践分享

    点击上方"LiveVideoStack"关注我们 边缘云计算,简称边缘云,是基于云计算的核心技术和边缘赋予的能力,构筑在边缘基础设施之上的云计算平台,为"万物互联&quo ...

最新文章

  1. 火星上真的有液态水?!欧洲科学家新发现登上《自然·天文学》
  2. 大乐斗2服务器维护,2月23日更新公告
  3. 二一、MDT 2013 Update 1批量部署-客户端批量授权利用KMS服务器激活
  4. RabbitMQ支持的消息模型
  5. devops_您无法购买DevOps
  6. python3 ftp服务器_python3实现ftp服务功能(服务端 For Linux)
  7. 马云再谈 996:真正的 996 与被剥削无关
  8. 可以插卡的ipad_如何使用Mac或者ipad打电话
  9. 系统学习深度学习(三十九)--基于模型的强化学习与Dyna算法框架
  10. 计算机的分类按cpu芯片可以分为,按CPU芯片可分为单片机、单板机、多芯片机和多板机...
  11. B/S、C/S架构与视频对话技术
  12. 小学计算机课flash的教案,信息技术flash教案
  13. android聊天软件开发,实战篇(1)
  14. 2021年,我已经说服 27 个人不上培训机构了
  15. html语言超链接提示,HTML超链接
  16. 2019 杭电多校第6场 HDU - 6638 Snowy Smile 线段树 最大子段和
  17. 喂信截屏win11泛白 白屏 问题解决
  18. Markdown合并表格单元格
  19. 求助!!!pycharm第一次安装后启动时报错怎么解决
  20. 一个骗人的恶劣网站: GPS 定位好友 的传说 ( 其中一个域名是 ipl38.com 诈骗:利用手机号码GPS卫星追踪你的他(她)在什么位置

热门文章

  1. UI 设计初学者应该怎样入门?
  2. UPX 0.89.6 - 1.02 / 1.05 - 2.90 (Delphi) stub - Markus Laszlo 手动脱壳
  3. JAVA 注解 processor_注解处理器(Annotation Processor)简析
  4. 苹果cms视频、资讯、 明星采集参数设置教程
  5. 淘宝API 淘宝店铺信息
  6. KCF论文理解与源码解析
  7. android 4.4.2 wifi,三星I9300升级至安卓4.4.2之后 wifi无法连接的解决方法
  8. 一种简单的护眼模式实现
  9. 论文解读 ——TimesNet 模型
  10. Android开发之语音识别