记一次线上CPU持续飙升的问题排查

2023-10-31

最近公司的事务多了很多,都很少有时间来更新了。上周六项目上刚刚发生了一次CPU持续飙高,导致服务不可用的线上事故,在此也简单做下记录。

问题排查的过程大概是这样的:

查看业务日志中最开始报错的信息,发现数据库连接超时,redis也连接超时,而且出现了大量的连接超时。所以一开始怀疑数据库挂了导致业务线程一直积压。

DBA排查了数据库的情况,发现数据库并没有压力,也运行正常。redis的存储是满的。

然后开始排查cpu飙高的进程以及线程。步骤如下:

1、通过top命令可以看到哪个进程的cpu是高的。

2、然后通过top -Hp 进程id,可以查看这个进程对应的线程情况。

3、准备好jstack 进程id > /opt/test.log 命令。最好是新开窗口。再执行命令的那一刻,截图下top -Hp的线程情况,可以看到哪些线程当时是飙高的。

我截图的示例:

然后将线程的pid转化为16进制,然后在导出的jstack文件中查找对应的线程。 如果找不到,多执行几次步骤3(因为线程是不断变化的,所以这块需要手速)

从图中可以看到这个进程总CPU将近190%, 前四个线程各占40%+,经过查看这四个线程,

以28745来看,其16进制是7049, 在文件中查找如下:

可以看到是个GC的线程。同理,其他三个对应其他三个GC线程。还有个11.3%的线程,是VM Thread本身的线程,从这里可以看出,整个jvm已经只干GC的工作了,没有啥业务在进行了。而且在文件中还可以看到,基本其他线程都是阻塞状态:

所以其他线程的CPU基本是0%。

 

这就说明了GC导致了CPU的持续飙高。那什么引起的GC呢。为此我们导出了jmap文件进行分析。为了尽快恢复业务,导出之后,选择了立马重启了服务。但是我们发现很快CPU又飙高了。而且监控了GC的次数发现很快就不停的GC了。

我们看了下jvm的内存设置,发现堆内存只有1G,新生代512m。结合jmap分析,发现有大量的大对象

而且大对象的方法也进行定位。后来咨询了一下业务方,这个方法会有裂变式的数据增长,项目上新增了一些相关的基础数据,导致数据裂变式增长,jvm内存也比较小,所以大量的数据导致了jvm不停的垃圾回收最终会导致OOM。

结合这个原因我们让项目梳理了基础数据,没用的停用掉。 同时修改jvm内存,堆内存设置3000m,新生代maxnewsize设置为2000m,以让jvm更多的进行YGC,而不是FGC。后续还需要项目扩大redis的内存空间,减少缓存命中不了的情形。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

记一次线上CPU持续飙升的问题排查 的相关文章

随机推荐

  • 区块链技术2---BTC的数据结构

    1 Hash pointers 哈希指针 和普通指针相比 哈希指针除了保存地址还保存哈希值 2 Block chain 区块链中的区块通过哈希指针相连 这里的哈希指针的哈希值是对前一个区块的整体取哈希值 包括前一个区块的哈希指针 因此区块链
  • python3.7安装dlib (Wind10)

    使用pip install dlib 提示失败 原因 https pypi org project dlib files 查看说明最新版本dlib 19 20 0 不支持Python3 7 解决方案 整理了下网上说的方案大致如下 一 编译安
  • android 悬浮组件实现

    项目需求 需要实现一个每个页面都存在的悬浮按钮 可以拖动 跟随整个项目的生命周期 即应用登录之后显示悬浮按钮 应用退出之后 隐藏悬浮按钮 特殊页面隐藏悬浮按钮 应用后台展示之后 隐藏悬浮按钮 应用恢复前台展示 显示悬浮按钮 准备工作 添加权
  • js提示“没有权限”的问题(转载)

    当某个互联网运营商的网站上规模之后 他们都会考虑将网站部署到主域名相同 子域名不同的服务器集群上 以此来构建一个聚合的应用 同时 希望能够利用 JavaScript 在不同子域的网页间相互操作 实现一个对用户来说 无缝 的应用 这时 跨域操
  • 我是如何用 redis 分布式锁来解决线上历史业务问题的

    近期发现 开发功能的时候发现了一个 mq 消费顺序错乱 历史遗留问题 导致业务异常的问题 看看我是如何解决的 问题抛出 首先 简单介绍一下情况 线上 k8s 有多个 pod 会去消费 mq 中的消息 可是生产者发送的消息是期望一定要有序去消
  • HTML5 postMessage和跨域通信

    HTML5 postMessage和跨域通信 http iknowledge wikispaces com HTML5 postMessage E5 92 8C E8 B7 A8 E5 9F 9F E9 80 9A E4 BF A1 HTM
  • stm32cubemx hal学习记录:FreeRTOS中断管理

    一 参数配置 1 配置RCC USART1 时钟84M 2 配置SYS 将Timebase Source修改为除滴答定时器外的其他定时器 3 初始化LED的两个引脚 两个按键引脚 4 开启FreeRTOS v1与v2版本不同 一般选用v1即
  • 梯度下降法及其Python实现

    梯度下降法 gradient descent 又名最速下降法 steepest descent 是求解无约束最优化问题最常用的方法 它是一种迭代方法 每一步主要的操作是求解目标函数的梯度向量 将当前位置的负梯度方向作为搜索方向 因为在该方向
  • 轻松玩转开源大语言模型bloom(一)

    前言 chatgpt已经成为了当下热门 github首页的trending排行榜上天天都有它的相关项目 但背后隐藏的却是openai公司提供的api收费服务 作为一名开源爱好者 我非常不喜欢知识付费或者服务收费的理念 所以便有决心写下此系列
  • Vue3最常见的10道面试题:含答案和代码示例的练习题

    本文列举了10道Vue3面试题 每道题都包含了答案和代码示例 希望对你的面试有所帮助 什么是Vue3 Vue3是Vue js的下一个主要版本 它带来了很多重要的改进和新功能 包括更快的渲染速度 更好的类型支持 更好的组合API等 什么是Co
  • Postman 如何调用文件上传下载接口

    文件导入导出是管理后台的通用功能 所以在接口写好后在没有前端页面使用Postman进行接口调用测试接口功能成为一个选择 导出 在我们输入接口地址 token等候 点击send 发现下载的成为了乱码 如下图 这明显不符合我们的预期期望 在se
  • 文本分析简历项目收集-----机器学习(仅供参考)

    文本分析 项目3 基于自然语言处理的影评分析 项目简介 通过大量的正面和负面的电影评论对计算机进行自然语言训练 实现计算机对电影评论的基本情感分析 使其能够快速判断出评论是否积极 个人职责 1 对正面和负面的电影评论进行分词处理 整理成规定
  • 一次让人难以忘怀的排查频繁Full GC过程

    我们的Java应用因频繁FULL GC导致性能降低很多 经过多人的定位也没有结论 于是我自主请命 经过一天的研究终于搞定了 现把经验与大家共享 相关的gc日志如下 4 758 Full GC PSYoungGen 464K gt 0K 71
  • linux统计一个文件中特定字符的个数

    统计一个文件中某个字符串的个数 其实就是在在一块沙地里面找石头 有的人看到石头以后 在上面做个标记 grep 然后记住自己做了多少个标记 有的 人看到石头以后 把它挖了 tr 最后统计自己挖了多少石头 有的人看到石头以后 把它跳过去 awk
  • STL:list的模拟实现(迭代器失效探讨)

    为什么重新设计list迭代器 对迭代器解引用 我们希望拿到的是指针所指向的值域 而直接解引用拿到的是指针所指向的节点 对list指针 和 迭代器 提供一种方法 使其能够按照顺序访问容器 聚合物 所含的各个元素 并且不用暴露容器内部的表述方式
  • 达芬奇15中文版

    教程 1 下载解压 得到davinci resolve 15原程序和文件 2 双击文件 DaVinci Resolve Studio 15 0b2 Windows exe 依提示安装原程序 3 达芬奇软件需要安装必要的组件 一般按默认安装即
  • Flexible弹性布局

    flex布局 弹性布局 flex的两个重要概念 开启了flex布局的元素叫flex container display flex inline flex flex container 里面的直接子元素叫做 flex items flex布局
  • 来源查询检索的研究

    来源查询检索的研究 来源查询的方式主要有 基于内容索引的查询 gt 基于时间局部性的上下文增强搜索查询 gt 基于因果关系的查询 根据provenance提供上下文有关的索引 即因果关系 1 传统的来源查询检索方式为基于内容索引的查询 在这
  • 阿里云视频点播文件上传-iOS

    文章目录 阿里云视频点播文件上传 iOS 一 上传方式 方式一 上传地址加凭证上传 1 请求AppServer 2 在start的回调中设置上传地址和上传凭证 3 uploadAuth过期重新设置 4 上传图片和上传视频 方式二 STS方式
  • 记一次线上CPU持续飙升的问题排查

    最近公司的事务多了很多 都很少有时间来更新了 上周六项目上刚刚发生了一次CPU持续飙高 导致服务不可用的线上事故 在此也简单做下记录 问题排查的过程大概是这样的 查看业务日志中最开始报错的信息 发现数据库连接超时 redis也连接超时 而且