记一次CPU有规律飙高的线上问题排查过程

2024-02-06 18:28

本文主要是介绍记一次CPU有规律飙高的线上问题排查过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、背景

最近在计费系统模块和灰度发布相关的功能已经基本交付,在这个间隙中,领导说有个线上问题需要排查下,
问题的场景比较有意思,排查过程中也有一些成长,这里记录一下。

二、排查过程

2.1 查看pinpoint 监控

首先根据领导的反馈看pinpoint中的JVM的CPU日志:
image.png
CPU每隔一个小时会有一个突刺,对于平时的表现来看有个波峰。而且通过不同时段的波峰的表现看是相对有规律的,同时波峰的持续时间也是不太固定的,有时候是2-4分钟,有时候是将近10分钟,另外发生波峰的时间点大多在每个小时的前10分钟左右,如下监控显示:
image.png

2.2 排除FGC的影响

因为最近上线该服务的时候我们修改了JVM的启动参数,领导说可以明确没有GC,这里我也看了JVM的启动参数:
image.png
另外就是堆内存和非堆内存的监控也没有明确有GC的影子,所以这里先排除FGC的影响。另外一方面如果出现CPU利用率飙高的情况下之前遇到的都是接近百分之百,目前基本是75%左右。

2.3 查看ELK日志-SQL部分

这里先看一下该服务在处于CPU飙高的时间段内SQL方面的监控日志:
image.png
排查如下日志:

[cn.xxx.dao.xxMapper.selectByxxxIdAndRound]-[debug]:<== Total: 1

这里主要看SQL内容和Total字段返回的条数,但是基本上没有发现问题,可以排除是SQL 方面的原因了。

2.4 查看缓存代码

由于之前做过分布式本地缓存刷新的方案和落地,所以就敏感的去查一下本地缓存方面的代码,因为有个关键点是本地缓存用Guava构建的,同时注释说明是每个小时构建一次,这里我们看一下构建代码:

CacheLoader<String, Map<String, Object>> loader =new CacheLoader<String, Map<String, Object>>() {@Overridepublic Map<String, Object> load(String key) throws Exception {return loadInfo(key);}@Overridepublic ListenableFuture<Map<String, Object>> reload(final String key, Map<String, Object> voiceSiteInfo) {ListenableFutureTask<Map<String, Object>> task =ListenableFutureTask.create(new 

这篇关于记一次CPU有规律飙高的线上问题排查过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/685160

相关文章

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

关于跨域无效的问题及解决(java后端方案)

《关于跨域无效的问题及解决(java后端方案)》:本文主要介绍关于跨域无效的问题及解决(java后端方案),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录通用后端跨域方法1、@CrossOrigin 注解2、springboot2.0 实现WebMvcConfig

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Java死锁问题解决方案及示例详解

《Java死锁问题解决方案及示例详解》死锁是指两个或多个线程因争夺资源而相互等待,导致所有线程都无法继续执行的一种状态,本文给大家详细介绍了Java死锁问题解决方案详解及实践样例,需要的朋友可以参考下... 目录1、简述死锁的四个必要条件:2、死锁示例代码3、如何检测死锁?3.1 使用 jstack3.2

解决JSONField、JsonProperty不生效的问题

《解决JSONField、JsonProperty不生效的问题》:本文主要介绍解决JSONField、JsonProperty不生效的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录jsONField、JsonProperty不生效javascript问题排查总结JSONField

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三