线上CPU飙高如何处理?

这篇具有很好参考价值的文章主要介绍了线上CPU飙高如何处理?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、背景
某一天下午业务高峰期,突然收到线上服务CPU冲高,线程池被打满,几分钟之内,服务很快进入假死状态,系统频繁重启,客户反馈小程序或APP各种系统异常。

二、应急过程
1)运维确认前天晚上是否有版本变更,回退版本重启启用,发现系统仍然告警,排除版本引起的故障。
2)收到线上CPU和线程池打满的告警后,从线上dump线程运行情况,开始定位问题。
3)服务动态扩容CPU和内存,调整JVM启动参数,G1启动内存调整为6G。
4)redis收到频繁告警,CPU使用率达到100%,流量监控1.8G/s。
5)追踪发现业务上线了某个功能,导致redis流量暴增,系统接口响应非常慢,线程很快被打满,迅速通知业务下线功能。
6)系统恢复正常。

三、原因分析
1)业务方推广上了某功能,导致应用的流量大了3倍,QPS达到8000/s,后分析代码发现,之前某折扣策略规则都是存在redis中,
后面上的新业务,策略规则中有一个AOI的维度有600个,导致一条策略的报文大小大概为60kb,这样的策略,运营上了14个,
当业务高峰期,大流量下请求redis,导致redis cpu飙升非常快,带宽很快被打爆,而业务系统对redis依赖很重,接口请求都被redis拖垮
响应越来越慢。
2)应用节点虽然full gc很少,但是young gc非常频繁1s达到3次,严重影响了系统性能。

四、事后改进措施
1)调整应用JVM大小及GC参数
2)应用节点CPU及内存扩容
3)考虑到折扣策略数据量没那么大,针对redis 大key,优化缓存读写策略,引入本地+redis的二级缓存,优先读取本地缓存,减少对redis的冲击
3.1) 在应用启动的时候, 将折扣策略信息预热到本地缓存
3.2) 管理后台上架或下架策略的时候,广播消息,刷新二级缓存
4) 本地缓存失效,在应用中打印告警日志,配合监控系统告警研发同学,人工介入,触发job,重刷缓存,保存本地缓存能快速恢复
5) 接口从缓存中获取的策略json字符串转为大对象,在高并发下,这一步操作非常耗时并且很容易触发young gc,优化为全局静态变量存放大对象,减少tolist对象转换操作
例如:
String discountStr = discountCacheService.findStrategyList();
//这一步非常耗时
List<StrategyListDTO> strategyList = JsonUtil.toList(discountStr, StrategyListDTO.class);文章来源地址https://www.toymoban.com/news/detail-855650.html

到了这里,关于线上CPU飙高如何处理?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CPU 飙高问题排查和解决方法

    摘要 本文档记录了排查 CPU 飙高问题的处理过程和解决方法,从多个方面进行分析和排查。 问题简述 在一个生产环境中发现 CPU 飙高问题,但是无法确定问题的具体原因。 排查方法 使用 jstack 导出 JAVA 进程的线程栈信息,并分析线程栈信息,看能否定位到耗费 CPU 的线程。

    2024年02月07日
    浏览(39)
  • 【JVM】CPU飙高排查方案与思路

    1.使用 top命令 查看占用 cpu的情况 2.通过top命令查看后,可以查看是哪一个进程占用cpu较高,上图所示的进程为:40940 3.查看进程中的线程信息 4.可以根据进程 id 找到有问题的线程,进一步定位到问题代码的源码行号 因为根据进程ID 找到的线程id显示的是16进制,所以需要将查

    2024年02月13日
    浏览(27)
  • 数据库CPU飙高问题定位及解决

    在业务服务提供能力的时候,常常会遇到CPU飙高的问题,遇到这类问题,大多不是数据库自身问题,都是因为使用不当导致,这里记录下业务服务如何定位数据库CPU飙高问题并给出常见的解决方案。 在分析CPU使用率飙升根因前,先介绍下CPU使用率公式: 可见,CPU使用率与【

    2024年02月10日
    浏览(36)
  • 记录Flink 线上碰到java.lang.OutOfMemoryError: GC overhead limit exceeded如何处理?

    这个问题是Flink TM内存中我们常见的,看到这个问题我们就要想到下面这句话: 程序在垃圾回收上花了很多时间,却收集一点点内存,伴随着会出现CPU的升高。 是不是大家出现这个问题都会出现上面这种情况呢。那我的问题出现如下: 发现JVM Heap堆内存过高。那么堆内存包含

    2024年02月03日
    浏览(27)
  • 【面试】线上 CPU 100% 问题排查

    回答套路一般为:线上服务器没有排查过,线上服务器只有运维才有操作权限。在平时开发的时候,在测试服务器上排查过。 2.1、将代码打包成 jar 包 参考: 点我 2.2、传到服务并运行 运行好的效果如下 3.1、拿到进程 id 通过 top 命令,就可以看到让 cpu 100% 的进程 id,pid 就是

    2024年02月11日
    浏览(39)
  • 电脑入门:CPU显示100%该如何处理

    经常在装软件时,CPU显示运行在100%,该如何处理?!   经常出现CPU占用100%的情况,主要问题可能发生在下面的某些方面:  CPU占用率高的九种可能  1、防杀毒软件造成故障  由于新版的KV、金山、瑞星都加入了对网页、插件、邮件的随机监控,无疑增大了系统负担。处理方

    2024年02月07日
    浏览(256)
  • Java线上服务CPU、内存飙升问题排查步骤!

    作为一名从事Java开发快一年的程序员,在线上经常碰到 某个模块的Pod发出CPU与内存告警的问题 ,而这些问题会导致系统响应缓慢甚至是服务不可用。一般情况下可以通过 重启 或者 调高Pod的资源量或者增加Pod数量 暂时解决问题,但这是治标不治本的,只有找到问题发生的原

    2024年02月16日
    浏览(37)
  • Java线上CPU内存冲高问题排查步骤

    作为一名从事Java开发快一年的程序员,在线上经常碰到 某个模块的Pod发出CPU与内存告警的问题 ,而这些问题会导致系统响应缓慢甚至是服务不可用。一般情况下可以通过 重启 或者 调高Pod的资源量或者增加Pod数量 暂时解决问题,但这是治标不治本的,只有找到问题发生的原

    2024年02月07日
    浏览(38)
  • 服务器遭受攻击,CPU升高,流量升高,你一般如何处理

    服务器遭受攻击,CPU升高,流量升高,你一般如何处理? 在什么情况下服务器遭受攻击,会导致CPU升高,流量升高 1.DDoS(分布式拒绝服务攻击):这是一种常见的网络攻击方式,攻击者通过利用多个控制的机器同时向目标服务器发送大量的请求流量,导致服务器无法正常处

    2024年02月11日
    浏览(33)
  • 【记一次线上事故的排查思路】- CPU飙升问题排查

    由于项目排期较紧,临时从其他组调来三个开发资源帮我一起做项目,难免上线的时候大家的需求一块上线。 问题来了,上线三天后,线上CPU总是莫名奇妙的突然飙升,飙升后CPU并未降下来,而是一直处在高点。 由于是线上导致的问题,CPU超限后,会自动重启项目,未能保

    2024年01月23日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包