范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

实战!使用阿里Arthas工具分析CPU飙高

  来源:码猿技术专栏
  Arthas 是阿里开源的 Java 诊断工具,相比 JDK 内置的诊断工具,要更人性化,并且功能强大,可以实现许多问题的一键定位,而且可以一键反编译查看源码,甚至是直接进行生产代码热修复,实现在一个工具内快速定位和修复问题的一站式服务。
  今天,我就带你使用 Arthas 定位一个 CPU 使用高的问题,系统学习下这个工具的使用。
  首先,下载并启动 Arthas: curl -O https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jar
  启动后,直接找到我们要排查的地方 JVM 进程,然后可以看到 Arthas 附加进程成功: [INFO] arthas-boot version: 3.1.7 [INFO] Found existing java process, please choose one and hit RETURN. * [1]: 12707   [2]: 30724 org.jetbrains.jps.cmdline.Launcher   [3]: 30725 org.geekbang.time.commonmistakes.troubleshootingtools.highcpu.HighCPUApplication   [4]: 24312 sun.tools.jconsole.JConsole   [5]: 26328 org.jetbrains.jps.cmdline.Launcher   [6]: 24106 org.netbeans.lib.profiler.server.ProfilerServer 3 [INFO] arthas home: /Users/zhuye/.arthas/lib/3.1.7/arthas [INFO] Try to attach process 30725 [INFO] Attach process 30725 success. [INFO] arthas-client connect 127.0.0.1 3658   ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.  /  O   |  .--. ""--.  .--"|  "--"  | /  O   "   .-" |  .-.  ||  "--"."   |  |   |  .--.  ||  .-.  |`.  `-. |  | |  ||  |      |  |   |  |  |  ||  | |  |.-"    | `--" `--"`--" "--"   `--"   `--"  `--"`--" `--"`-----"     wiki      https://alibaba.github.io/arthas tutorials https://alibaba.github.io/arthas/arthas-tutorials version   3.1.7 pid       30725 time      2020-01-30 15:48:33
  输出 help 命令,可以看到所有支持的命令列表。今天,我们会用到 dashboard 、thread 、jad 、watch 、ognl 命令,来定位这个 HighCPUApplication 进程。
  你可以通过官方文档:https://arthas.aliyun.com/doc/commands.html,查看这些命令的完整介绍:
  dashboard 命令用于整体展示进程所有线程、内存、GC 等情况,其输出如下:
  可以看到,CPU 高并不是 GC 引起的,占用 CPU 较多的线程有 8 个,其中 7 个是 ForkJoinPool.commonPool。
  ForkJoinPool.commonPool 是并行流程默认使用的线程池。
  所以,此次 CPU 高的问题,应该出现在某段并行流的代码上。
  接下来,要查看最繁忙的线程在执行的线程栈,可以使用 thread -n 命令。这里,我们查看下最忙的 8 个线程: thread -n 8
  输出如下:
  可以看到,由于这些线程都在处理 MD5 的操作,所以占用了大量时间 CPU 资源。我们希望分析出代码中哪些逻辑可能会执行这个操作,所以需要从方法栈上找出我们自己写的类,并重点关注。
  由于主线程也参与了 ForkJoinPool 的任务处理,因此我们可以通过主线程的栈看到需要重点关注 org.geekbang.time.commonmistakes.troubleshootingtools.highcpu.HighCPUApplication 类的 doTask 方法。
  接下来,使用 jad 命令直接对 HighCPUApplication 类反编译: jad org.geekbang.time.commonmistakes.troubleshootingtools.highcpu.HighCPUApplication
  可以看到,调用的路径是 main->task()->doTask(),当 doTask 方法接收到的 int 参数等于某个常量的时候,会进行 1 万次的 MD5 操作,这就是耗费 CPU 的来源。那么,这个魔法值到底是多少呢?
  你可能想到了,通过 jad 命令继续查看 User 类即可。这里因为是 Demo,所以我没有给出很复杂的逻辑。在业务逻辑很复杂的代码中,判断逻辑不可能这么直白,我们可能还需要分析出 doTask 的"慢"会慢在什么入参上。
  这时,我们就可以使用 watch 命令来观察方法入参。如下命令,表示需要监控耗时超过 100 毫秒的 doTask 方法的入参,并且输出入参,展开 2 层入参参数: watch org.geekbang.time.commonmistakes.troubleshootingtools.highcpu.HighCPUApplication doTask "{params}" "#cost>100" -x 2
  可以看到,所有耗时较久的 doTask 方法的入口都是 0,意味着 User.ADMN_ID 常量应该是 0。
  最后,我们使用 ognl 命令来运行一个表达式,直接查询 User 类的 ADMIN_ID 静态字段来验证是不是这样,得到的结果果然是这样 0:
  [arthas@31126]$ ognl "@org.geekbang.time.commonmistakes.troubleshootingtools.highcpu.User@ADMIN_ID" @Integer[0]
  需要额外说明的是,由于 monitor、trace、watch 等命令是通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此诊断结束要执行 shutdown 来还原类或方法字节码,然后退出 Arthas。
  在这个案例中,我们通过 Arthas 工具排查了高 CPU 的问题:
  首先,通过 dashboard + thread 命令,基本可以在几秒钟内一键定位问题,找出消耗 CPU 最多的线程和方法栈; 然后,直接 jad 反复编译相关代码,来确认根因; 此外,如果调用入参不明确的话,可以使用 watch 观察方法入参,并根据方法执行时间来过滤慢请求的入参。
  可见,使用 Arthas 来定位生产问题根本用不着原始代码,也用不着通过增加日志来帮助我们分析入参,一个工具即可完成定位问题、分析问题的全套流程。
  对于应用故障分析,除了阿里 Arthas 之外,还可以关注去哪儿的Bistoury :https://github.com/qunarcorp/bistoury工具,其提供了可视化界面,并且可以针对多台机器进行管理,甚至提供了在线断点调试等功能,模拟 IDE 的调试体验。

开了几十年的老店面临倒闭,却被快递救活了电商企业的狂欢,伴随着的是实体企业的落寞当年,我力排众议借钱开了小区内第一家超市,红火了十来年,原本以为可以靠着这个铺子养老,谁知近几年,买东西的人越来越少,盈利越来越低,甚至连成农村快递量突破150亿!对于农村驿站来说,是机遇还是挑战?近日,国家邮政局中国快递大数据平台实时监测公布数据,截至7月4日,快递业务总量突破500亿,接近2018年全年水平。其中,发往农村地区的业务量增长迅速,占了30,农村快递总量突破1快递进村很急,先理清思路再秣马厉兵最近这阵子消息不断,2025前实现村村通快递快递进村等国策一再被提及,很多当地政府都已经把快递进村写进了官网2021年的要务中。大家都知道有这么一回事,但是至今为止,不论是已经在进快递进村难?三部门给了方向,农村快递的红利期真的来了送货上门智能快递柜驿站,在城市居民享受着各类便利取件模式的当下,农村居民还要搭乘公交车前往距离自己十几公里甚至几十公里的地方去取件但,这一现状即将被改变!支持变加快发展,快递进村不快宝城市合伙人晟兴到家获福清创业大赛二等奖,受资本热捧4月29日,由共青团福清市委员会福清市总工会福清市发展和改革局福清市人力资源和社会保障局福清市工商业联合会共同启动的福清市青年创新创业创造大赛正式举行,众多媒体和福清市电视台同步转PingCAPCEO刘奇一个好的数据库不是写出来的一个好的数据库不是写出来的PingCAP创始人兼CEO刘奇的这句话,道出了开源数据库厂商创新发展的心声。2021年7月24日,PingCAPDevCon大会现场,云集了上千人的广大2025全面实现村村通快递,农村快递能不能干,怎么干?最适合农村快递的模式是什么?快递驿站,也就我们常说的快递代收点,而在农村地区开设一家快宝驿站,只需两三千元。近年来,随着电商直播团购等线上销售模式的发展,农村地区的消费需求正加速释快递共配是什么?怎么就突然火了?在快递业务量连年飙涨的当下,原本应该赚得盆满钵满的市场,却因为成本高管理难效率低等问题,变成一个难啃的骨头,想拿却拿不下来,但思维一旦转变,难啃的骨头可能就变成了人人争抢的香饽饽。再造陪伴机器人你需要一个陪伴机器人吗?像PepperMiroRokid这样的伴随机器人都是2015年左右开始的繁荣的一部分。然而,由于C终端的着陆困难和产品形式的单一,配套机器人在资本市场的普及日系车电动化转型你看好谁?别不信,本田有可能是最终赢家文Lei上个月22号,丰田CEO丰田章男才表示转型纯电动会摧毁日本经济。同为日系的本田,这几天就狠狠地打了丰田章男一记耳光。前几天,在本田举办的Honda中国电动化战略发布会上,本恒都牛肉抓住市场机遇,全渠道布局提升品牌核心竞争力当前,互联网给人类的生活提供了诸多便利,大家足不出户,只需要通过一部手机即可在线上挑选自己喜欢的衣物食品等等,再由快递送货上门。而互联网的出现也给企业提供了更好的发展契机。如在肉牛
政策支持高速公路充换电设施建设加速推进今天(4月26日),交通运输部发布数据,目前全国已有3102个高速公路服务区建设了充换电基础设施,共建成充电桩约13374个,主要集中在京津冀长三角珠三角等东部地区,西部及东北地区欧美人工智能监管政策新趋势自拜登总统上台后,美欧在人工智能监管政策方面呈现出趋同和对标的态势,或将对今后全球人工智能治理格局产生较大影响。以上观点来自美国乔治城大学麦考特公共政策学院学者亚历克斯恩格勒(Al同时任命两位首席科学家,特斯联加速智慧城市布局特斯联宣布近日任命邵岭博士和杨旸博士担任公司的首席科学家。资料显示,邵岭博士一直从事AI相关科研,先后担任荷兰飞利浦研究院资深科学家英国谢菲尔德大学高级讲师英国诺桑比亚大学讲席教授外媒中国打击加密货币挖矿支持数字人民币建设拉美社近日报道称,中国正在对加密货币的挖矿进行打击,同时推进其独一无二的数字货币计划的实施。报道称,2021年,中国国务院金融稳定发展委员会对比特币挖矿与交易明确提出打击要求,坚决著名的前间谍斯诺登揭示了他在加密货币Zcash(ZEC)中的角色事实证明,以向公众泄露美国机密文件而闻名的前间谍爱德华斯诺登为启用隐私的加密货币Zcash的推出做出了重大贡献。因向公众泄露美国国家安全局(NSA)机密文件而闻名的前间谍爱德华斯诺阿里云中国区总裁离职,副总裁逃往美国,市场份额跌至第四本文原创,禁止抄袭,违者必究说到阿里云相信大家都不陌生,在2009年阿里集团宣布阿里巴巴云成立,将致力于云计算领域的研发。作为全球领先的云计算及人工智能科技公司,阿里云集云服务器云真5G真智能真未来飞凡MARVELR兑现科技想象赴约路上,前卫科技助力准时抵达。飞凡MARVELR配备RPILOT自动辅助驾驶系统,19。4英寸智慧触控屏,MR混合虚拟现实导航,环宇之光集智设计LED大灯,感应开启隐藏式门把手,未来十年中国十大热门专业致敬平凡的你未来十年,中国最热门的十大专业,个人分析,仅供大家参考。1电气工程及自动化专业在我国工业社会现代化,新型工业化发展越来越快的未来十年,电气工程及自动化专业越来越重要。电陆奇我现在最看好这四大技术趋势白交发自凹非寺量子位公众号QbitAI当下,究竟有哪些技术趋势值得关注?陆奇的答案是第一是数字化和数字化应用第二是新一代的生命科学,尤其是数字化技术和生命科学相结合第三是新能源,尤跨屏网后台如何添加哔哩哔哩腾讯视频爱奇艺等第三方视频教程跨屏网是免费的建站平台,主打模板电脑手机跨屏自适应,不少人在使用的过程中会遇到各种各样的问题,我们会通过这种方式进行整理发布,以供更多的人查阅和帮助,下面是跨屏网后台如何添加引用哔关于征集携手构建网络空间命运共同体实践案例的通知2015年,中国国家主席习近平在第二届世界互联网大会首次提出构建网络空间命运共同体理念。构建网络空间命运共同体,是人类命运共同体理念在网络空间的具体体现和重要实践,为推动全球互联网