当前位置: 首页 > news >正文

测试基础|记一次CPU冲高的排查过程!

背景

需求需要计算大容量环境下多个数据库数据的负载,并把分库关系迁移,以实现多个数据库节点负载均衡。

现象

执行分库迁移脚本后,脚本执行进度始终保持 10%,组件 CPU 使用率冲到 95% 以上,且后台没有打印出有用的日志。

图片

排查过程

  1. 尝试重启组件并重写执行脚本:判断该故障是否可复现。结论:故障可以复现。

  2. 查看新增代码:发现新增代码量太大,若进行全面代码走查将耗费大量时间,且由于后台日志较少,增加了代码走查的难度。

  3. 使用 arthas 工具排查

    3.1 编译并打包 arthas,然后将其部署到节点上。

    3.2 通过kubectl -n zenap cp {arthas-path} {pod}:{任意路径}命令将 arthas 拷贝到容器中。

    3.3 进入容器内的 arthas 目录,执行java -jar arthas-boot.jar,并选择容器中运行的 java 进程 pid。

    3.4 使用 arthas 提供的命令进行问题排查,首先执行dashboard命令查看面板。

    - 发现pool-47-thread-1线程占用 CPU 90.98%,疑似进入死循环。

    图片

    3.5 继续执行thread -n 3命令找到该线程,查看其堆栈信息。

    - 发现占用 CPU 的线程堆栈中,LoadMigrateJobregularMigrate方法存在问题。

图片

代码问题定位

图片

- 在while循环中,第二个if逻辑判断如果网元以cn.me开头且配置为False,则会继续循环。

- 但是,循环内没有对detailLoadsInOneDB_out进行任何增减操作,导致每次循环都会走continue流程,从而引发死循环。

- 这就是为什么 CPU 使用率会一直冲高。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

相关文章:

  • WSL 下的 CentOS 装 Docker
  • Ubuntu 22.04 make menuconfig 失败原因
  • SAP学习笔记 - 开发03 - CDSView开发环境搭建,Eclipse中连接SAP,CDSView创建
  • 认知杂谈54
  • AAudio的延迟优化
  • SpringMVC基于注解使用:国际化
  • 点云数据常见的坐标系有哪些,如何进行转换?
  • 红旗EQM换电连接器哪家生产
  • Vue3 父子传参 简单易懂
  • 视频处理基础之gradio框架实现
  • Transformer从零详细解读
  • 5G前传-介绍
  • IBM Storwize V7000存储控制器故障节点报错574
  • Redis典型应用 - 分布式锁
  • SVN下载安装使用方法
  • 【译】理解JavaScript:new 关键字
  • Docker: 容器互访的三种方式
  • in typeof instanceof ===这些运算符有什么作用
  • jQuery(一)
  • JS数组方法汇总
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • PHP面试之三:MySQL数据库
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • SQLServer插入数据
  • webgl (原生)基础入门指南【一】
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 每天一个设计模式之命令模式
  • 责任链模式的两种实现
  • 正则表达式小结
  • 《码出高效》学习笔记与书中错误记录
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • # 飞书APP集成平台-数字化落地
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #Linux(make工具和makefile文件以及makefile语法)
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (二) 初入MySQL 【数据库管理】
  • (二)原生js案例之数码时钟计时
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (篇九)MySQL常用内置函数
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET gRPC 和RESTful简单对比
  • .NET 直连SAP HANA数据库
  • .NET 中创建支持集合初始化器的类型
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .net6+aspose.words导出word并转pdf