当前位置:首页 > 科技  > 软件

大厂真实案例,CPU 升高问题如何排查?五分钟掌握

来源: 责编: 时间:2024-06-07 17:20:01 372观看
导读好久没写技术文章了,今天下班“早”,简单叨叨一篇。早下班的原因说起来也有点搞笑,是因为健身时候杠铃把手上砸了个口子。砸伤当时我看了一眼,虽然很痛但骨头没事,竟然心中还有一丝庆幸。缝针吧,有点夸张,不处理吧,还挺深。于

好久没写技术文章了,今天下班“早”,简单叨叨一篇。VRC28资讯网——每日最新资讯28at.com

早下班的原因说起来也有点搞笑,是因为健身时候杠铃把手上砸了个口子。砸伤当时我看了一眼,虽然很痛但骨头没事,竟然心中还有一丝庆幸。缝针吧,有点夸张,不处理吧,还挺深。于是,我在从医院处理完伤口后,有了这篇文章。VRC28资讯网——每日最新资讯28at.com

好了,言归正传。VRC28资讯网——每日最新资讯28at.com

CPU 升高问题案例

市面上通常对于 CPU 问题排查的案例面试比较少,基本上都在讲:如果 CPU 升到 100% 怎么办?VRC28资讯网——每日最新资讯28at.com

这确实是个高频问题,必须需要流利回答。之前也写过一篇文章,可以参考:VRC28资讯网——每日最新资讯28at.com

图片图片VRC28资讯网——每日最新资讯28at.com

重点问题!CPU利用率过高排查思路|原创VRC28资讯网——每日最新资讯28at.com

VRC28资讯网——每日最新资讯28at.com

真实案例

这是一个今天发生的真实案例(相关信息已脱敏处理,不影响案例本质)。VRC28资讯网——每日最新资讯28at.com

问题如下:这是一个比较大项目改动,改造的过程中涉及到了相当多下游接口的改动和相当多的依赖包。今天在上线发布后经过接口和功能验证,需求发布成功。VRC28资讯网——每日最新资讯28at.com

但是接着,我发布完成后才发现机器的平均 CPU 负载升高,平均 CPU 负载几乎升高了有 5-8 %,最高负载更是超过了 CPU 安全水位线。如此多的改动,到底是什么导致了 CPU 负载的上升?VRC28资讯网——每日最新资讯28at.com

我自己用 python 花了张图,大概下面这个样子VRC28资讯网——每日最新资讯28at.com

图片图片VRC28资讯网——每日最新资讯28at.com

问题出现,CPU 升高VRC28资讯网——每日最新资讯28at.com

快速处理: 我先快速对比了一下 CPU 负载升高的时间点,和发布时间基本对应,基本可以判断是本次发布引起的。虽然并没有影响到业务,但是发现问题后,我还是第一时间做了回滚处理。VRC28资讯网——每日最新资讯28at.com

注意:发布过程中出现任何问题不要想排查问题原因,直接回滚,血泪教训的铁律VRC28资讯网——每日最新资讯28at.com

排查问题

我排查问题的思路如下:VRC28资讯网——每日最新资讯28at.com

  1. 由于想到本次变更有很多新接口的引入,也有一些接口的对比代码,会带来额外的性能消耗,所以我先对比了发布前后的接口远程调用情况,结果是调用量没有明显变化,RT 也正常。
  2. 服务也有 kafka 消息处理,同样检查消息组件情况,调用量没有变化。
  3. 会不会是 GC 太多导致?检查 JVM 情况,依旧正常,甚至还因为重启机器表现要比之前好……
  4. 因为用到了线程池,会不会是因为使用线程池不合理,或者有什么死循环之类的。检查活跃线程情况,依旧和发布前相似。
  5. 那只能考虑是因为引入的某个依赖引起的了,他导致了预期外的变化。

问题引入的依赖有很多,到底是哪个依赖引入的?我难道一个个下掉去排查吗?VRC28资讯网——每日最新资讯28at.com

排除法,这也确实是一种办法,只不过是太辛苦了,事倍功半。更不用说还需要下掉相关代码,还得不断去耗时发布,实在是繁琐。VRC28资讯网——每日最新资讯28at.com

怎么办呢?不卖关子了,直接上 Arthas。VRC28资讯网——每日最新资讯28at.com

Async-profiler

Arthas 使用 async-profiler 生成 CPU/内存火焰图进行性能分析,弥补了之前内存分析的不足。VRC28资讯网——每日最新资讯28at.com

async-profiler 是一款开源的 Java 性能分析工具,原理是基于 HotSpot 的 API,以微乎其微的性能开销收集程序运行中的堆栈信息、内存分配等信息进行分析。VRC28资讯网——每日最新资讯28at.com

官网:https://github.com/async-profiler/async-profilerVRC28资讯网——每日最新资讯28at.com

我们常用的是 CPU 性能分析和 Heap 内存分配分析。在进行 CPU 性能分析时,仅需要非常低的性能开销就可以进行分析。VRC28资讯网——每日最新资讯28at.com

在进行 Heap 分配分析时,async-profiler 工具会收集内存分配信息,而不是去检测占用 CPU 的代码。async-profiler 不使用侵入性的技术,例如字节码检测工具或者探针检测等,这也说明 async-profiler 的内存分配分析像 CPU 性能分析一样,不会产生太大的性能开销,同时也不用写出庞大的堆栈文件再去进行进一步处理,。VRC28资讯网——每日最新资讯28at.com

async-profiler 工具在采样后可以生成采样结果的日志报告,也可以生成 SVG 格式的火焰图。VRC28资讯网——每日最新资讯28at.com

图片图片VRC28资讯网——每日最新资讯28at.com

具体使用大家直接去官网看文档吧,有不懂留言。我这里直接说使用VRC28资讯网——每日最新资讯28at.com

使用 async-profiler 排查问题

进入测试服务器控制台,使用 JPS 命令查看 PID 信息。VRC28资讯网——每日最新资讯28at.com

➜  develop jps2800 Jps528 TestCode2450 Launcher

假设运行程序的名是 TestCode,可以看到对应的 PID 是 528。VRC28资讯网——每日最新资讯28at.com

使用下面命令:VRC28资讯网——每日最新资讯28at.com

./profiler.sh -d 20 -f 528.svg 528

对 528 号进程采样20秒,然后得到生成的 528.svg 文件,然后我们使用浏览器打开这个文件,可以看到 CPU 的使用火焰图,如下(这里用网络图片代替):VRC28资讯网——每日最新资讯28at.com

图片图片VRC28资讯网——每日最新资讯28at.com

关于火焰图怎么看,一言以蔽之:火焰图里,横条越长,代表使用的越多,从下到上是调用堆栈信息。 在这个图里可以看到 main 方法上面的调用中 hotmethod3 方法的 CPU 使用是最多的,点击这个方法。还可能看到更详细的信息。VRC28资讯网——每日最新资讯28at.com

那么我们现在只需要查找 hotmethod3 使用的地方在哪里,就可以定位到问题代码。VRC28资讯网——每日最新资讯28at.com

当然,上面的是个代替 case,告诉你怎么看这个火焰图。真实的 case 要比这个更难排查。如下图,问题代码是个线程,是由某个类调用的:VRC28资讯网——每日最新资讯28at.com

图片图片VRC28资讯网——每日最新资讯28at.com

排查问题依赖引入

问题代码是一个 Thread 的 run 方法引起的,那么是谁调用的他呢?这个类的信息我打码了,假设为 ClassA。VRC28资讯网——每日最新资讯28at.com

但是排查代码,ClassA 根本没有被项目代码直接的调用,于是我找到了这个 CalssA 所属的依赖包 dep-demoA,看他是谁引入的。VRC28资讯网——每日最新资讯28at.com

./gradlew :项目名:dependencyInsight --dependency dep-demoA

这个命令会打出一个项目的依赖树,结果如下:VRC28资讯网——每日最新资讯28at.com

+--- com.ali:dep-demoA:1.0.0 (*)/--- com.ali:dep-demoB:1.0.0     /--- com.ali:dep-demoC:1.0.0

如上结果,项目中我是用的是 dep-demoC,结果他同时引入了 dep-demoB,我看了下这个 demoB,他很可能会跟 arthas 类似,通过 Java Agent技术和字节码增强技术以实现一定的功能,这对程序是非常有损耗的。(所以线上不能开 arthas)VRC28资讯网——每日最新资讯28at.com

尝试排除 demoB,代码如下:VRC28资讯网——每日最新资讯28at.com

all*.exclude group: "com.ali", module: "dep-demoB"

然后重启项目,CPU 负载下降,回归到正常水平,问题解决。VRC28资讯网——每日最新资讯28at.com

图片图片VRC28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-92746-0.html大厂真实案例,CPU 升高问题如何排查?五分钟掌握

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 避免删库跑路的办法,你知道吗?

下一篇: React 19 出手解决了异步请求的竞态问题,是好事还是坏事?

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • 5月iOS设备好评榜:iPhone 14仅排第43?

    来到新的一月,安兔兔的各个榜单又重新汇总了数据,像安卓阵营的榜单都有着比较大的变动,不过iOS由于设备的更新换代并没有那么快,所以相对来说变化并不大,特别是iOS好评榜,老款设
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 19个 JavaScript 单行代码技巧,让你看起来像个专业人士

    今天这篇文章跟大家分享18个JS单行代码,你只需花几分钟时间,即可帮助您了解一些您可能不知道的 JS 知识,如果您已经知道了,就当作复习一下,古人云,温故而知新嘛。现在,我们就开始今
  • 签约井川里予、何丹彤,单视频点赞近千万,MCN黑马永恒文希快速崛起!

    来源:视听观察永恒文希传媒作为一家MCN公司,说起它的名字来,可能大家会觉得有点儿陌生,但是说出来下面一串的名字之后,或许大家就会感到震惊,原来这么多网红,都签约这家公司了。根
  • 当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己“当家”的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • 郭明錤称华为和江淮汽车合作开发问界MPV,定价100万左右、计划明年量产

    8 月 1 日消息,郭明錤今天在 Medium 平台发布博文,称华为正在和江淮汽车合作,开发售价在 100 万元的问界 MPV,预计在 2024 年第 2 季度量产,销量目标为
  • 亲历马斯克血洗Twitter,硅谷的苦日子在后头

    文/刘哲铭  编辑/李薇  马斯克再次挥下裁员大刀。  美国时间11月14日,Twitter约4400名外包员工遭解雇,此次被解雇的员工的主要工作为内容审核等。此前,T
Top