一次现网redis CPU使用率异常定位

背景

618大促前,运维对系统做巡检时发现redis cpu利用率白天基本保持在72%左右,夜里也在60%以上。担心618流量比平时大,导致redis超负荷,因此找开发进行优化,降低redis的负载。
在这里插入图片描述

定位思路

其实资源使用率过高定位都是一个模式,不管是cpu使用率高还是内存使用率高甚至是磁盘使用率高。我们要做的就是找到明确的问题点(有bug导致不正常或者说过多的使用了资源),如果没有明确的问题点,那只能找出资源使用的分布,从高到底逐步分析代码,确认优化空间,优先对优化空间大的代码进行优化,这样才能达到小投入高回报。

  • 如果有明显的问题点,那还是很好定位的(或者说问题很容易捕捉)。比如java代码定位cpu使用率高时,通过top命令找到cpu占用高的线程,然后查看堆栈基本上就可以确认问题了。但并不是所有时候都有明显的问题点;这个时候,通过一些命令去观察时,捕捉到的数据并不是集中分布,那就不好直接确认问题。还是以java为例,使用top命令时,发现cpu占用率高的线程并不稳定,这个时候通过瞬间捕捉的高cpu使用率的线程去查看堆栈已经没太大意义了。这个时候要做的就是上述所说的找到cpu耗时的分布(像cpu可以使用火焰图),由高到底去逐个找优化空间了。

排查过程

初步观察监控,找到疑点

首先我是先看一下半夜的各项观察指标,确认可疑点。因为半夜用户数几乎可以忽略不计,用户的操作在系统整体占比非常低,这样不管去排查问题代码,还是看数据监控,都能更聚焦(对代码来说,关注后台异步操作;对监控来说,使用系统资源的指令更集中),相对容易找到问题所在。或者换个说法,半夜基本没有用户操作,能够基本消除用户操作对数据的干扰,使问题点更明显。
从监控上看,半夜使用率依然很高(超过60%),而且注意到半夜里执行的命令数下降了2/3。此处可大致推断出,半夜里面执行的操作是问题所在。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

确认半夜执行的命令分布,是否有明显的问题点

因为监控并不支持查看执行命令的分布,因此只能委托运维在业务最底的时候,使用redis的命令去导出redis执行的命令(使用的monitor指令)。
导出后发现大部分指令是session(系统用了spring session)的相关操作,这就跟实际业务情况有点矛盾了,spring session只有人操作系统时才会触发相关代码执行,半夜几乎没有用户,哪里来的人机接口调用。遂使用调用链查看半夜到底有啥接口被调用。通过调用链系统发现半夜主要就一个接口在被调用(占总体调用量的95%以上),不仅调用间隔低,而且间隔固定。于是找接口负责人确认业务场景(我是临时过来支援问题定位的,并不清楚他们的业务),他告诉我这个接口是给第三方集成用的机机接口,于是乎问题基本明了。

  • 我们去api平台注册接口给第三方用时,把接口url写错了,本应该填机机接口的,填成人机接口了。人机接口调用时会校验session,每次都会调用request.getSession获取session然后校验前端传相关认证信息。因为机机调用时没有cookie,因此每次都会创建新的session,然后半个小时候过期。

备注:从我的角度来讲,找到redis的问题命令后,就能够快速的找到问题接口以及问题,是因为我本身对系统使用的框架非常熟悉。因此,虽然定位资源利用率高的问题,有套路。但是如果对整个系统不了解(不仅是业务代码,系统使用的框架细节也要非常清楚),找到直接问题点后,很难往下一步找到问题根因。比如本问题中,该系统负责人,顺着我的思路找到有问题的redis的命令,但到了这一步后他就分析不下去了,他不知道这些redis命令是什么地方用的。

解决方案

纠正api平台上注册的url,由人机的改成机机的。

验证

因为session过期时有expire事件,因此解决措施实时后,cpu降到底部需要半个小时。因此观察cpu监控,特征是否符合。
我们大概9点实时的,半个小时候cpu如预期下降到底部,至此问题得以解决。
在这里插入图片描述

spring session相关代码分析

待续

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/403288.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Taro+Vue 创建微信小程序

TaroVue 创建微信小程序 一、全局安装 tarojs/cli二、项目初始化三、现在去启动项目吧 一、全局安装 tarojs/cli npm install -g tarojs/cli //安装 npm info tarojs/cli //查看安装信息 如果正常显示版本说明成功了,就直接跳到第二步吧官网说:…

Unity引擎基础知识

目录 Unity基础知识概要 1. 创建工程 2. 工程目录介绍 3. Unity界面和五大面板 4. 游戏物体创建与操作 5. 场景和层管理 6. 组件系统 7. 脚本语言C# 8. 物理引擎和UI系统 学习资源推荐 Unity引擎中如何优化大型游戏项目的性能? Unity C#脚本语言的高级编…

【ML】Image Augmentation)的作用、使用方法及其分类

图像增强(Image Augmentation)的作用、使用方法及其分类 1. 图像增强的定义2. 图像增强的作用3. 什么时候使用图像增强?4. 图像增强详细方法分类梳理4.1 图像增强方法列表4.2 边界框增强方法5. 参考资料 yolov3(一:模型…

K8S资源之PVPVC

概念 类似于Docker的数据卷挂载,将Pod中重要的文件挂载到宿主机上,如果Pod发生崩溃等情况自愈时,保证之前存储的数据没有丢失。 如上图中,将各个Pod中的目录挂载到存储层,如果Pod宕机后自愈均从存储层获取之前的数据…

00_remipi_软件评估记录

1.CPU 1.1 查看CPU信息命令 cat /proc/cpuinfo * processor: 系统中逻辑处理核心的编号,对于多核处理器则可以是物理核,或者使用超线程技术虚拟的逻辑核。 BogoMIPS: 在系统内核启动时粗略测算的CPU每秒运行百万条指令数(Million Instruct…

Selenium 自动化测试平台

1.介绍 Selenium 是一套 Web网站 的程序自动化操作 解决方案。 通过它,我们可以写出自动化程序,像人一样在浏览器里操作web界面。 比如点击界面按钮,在文本框中输入文字 等操作。 而且还能从web界面获取信息。 比如获取 火车、汽车票务信息…

网络编程,网络协议,UDP协议

网络: 1.协议:通信双方约定的一套标准 2.国际网络通信协议标准: 1.OSI协议: 应用层 发送的数据内容 表示层 数据是否加密 会话层 是否建立会话连接 传输层 …

mpls静态lsp实验

实验需求 R1、R2和R3之间已经部署了IGP协议,故192.168.10.0/24与192.168.20.0/24网络之间已经能够互访。现要求通过配置 静态LSP,使得这两个网络之间能基于MPLS进行互访,标签分配如图 组网图 实验思路 1、R1、R2和R3之间已经部署了IGP协议…

泰坦尼克号 - 从灾难中学习机器学习/Titanic - Machine Learning from Disaster(kaggle竞赛)第二集(加载数据)

此次目的: hello大家好,俺是没事爱瞎捣鼓又分享欲爆棚的叶同学!!!准备出几期博客来记录我学习kaggle数据科学入门竞赛的过程,顺便也将其中所学习到的知识分享出来。这是第一集(了解赛题&#x…

宝塔部署Django项目(华为云)

1、登录华为云: 2、点击远程登录: 3、打开宝塔网址(华为云选的是centos) 4、在华为终端复制指令点击运行: 会显示安装完成,出现一个页面记录一下,方便以后登录: 5、复制外网面板地…

【Linux线程】线程的深度解析(线程是什么?线程与进程区别是什么?)

目录 一、前言 二、 什么是线程 💧线程的引入💧 💧线程的基本概念 💧 💧线程的理解 💧 💧进程与线程的关系💧 💧程序如何划分(重拾页表、见一下LWP&…

基于springboot养老院管理系统pf

TOC springboot332基于springboot养老院管理系统pf 第1章 绪论 1.1选题动因 当前的网络技术,软件技术等都具备成熟的理论基础,市场上也出现各种技术开发的软件,这些软件都被用于各个领域,包括生活和工作的领域。随着电脑和笔记…

Python实战项目:天气数据爬取+数据可视化(完整代码)

一、选题的背景 随着人们对天气的关注逐渐增加,天气预报数据的获取与可视化成为了当今的热门话题,天气预报我们每天都会关注,天气情况会影响到我们日常的增减衣物、出行安排等。每天的气温、相对湿度、降水量以及风向风速是关注的焦点。通过…

实战OpenCV之图像显示

基础入门 OpenCV提供的功能非常多,图像显示是最基础也是最直观的一部分。它让我们能够直观地看到算法处理后的效果,对于调试和验证都至关重要。在OpenCV中,图像显示主要依赖于以下四个关键的数据结构和函数。 1、Mat类。这是OpenCV中最基本的…

LeetCode - LCR 146- 螺旋遍历二维数组

LCR 146题 题目描述: 给定一个二维数组 array,请返回「螺旋遍历」该数组的结果。 螺旋遍历:从左上角开始,按照 向右、向下、向左、向上 的顺序 依次 提取元素,然后再进入内部一层重复相同的步骤,直到提取完…

MySQL数据库入门,pycharm连接数据库—详细讲解

一.安装MySQL 1.常用MySQL5.7,首先安装MySQL, (一) (二) (三) (四) (五) 2.配置环境变量 打开MySQL安装路径,在其中找到…

ArcGis在线地图插件Maponline(好用版)

ArcGis加载插件,可在线浏览谷歌地图、天地图、高德地图、必应地图等多种,包含街道、影像、标注地图等信息(谷歌地图需自备上网手段),免费注册账号即可使用,可加载无水印底图。 与大地2000坐标无需配准直接使…

洛杉物理服务器怎么样?

洛杉矶作为美国科技和互联网的重要中心,物理服务器的质量通常非常高,可以提供卓越的性能、强大的安全性、多样的配置选项和专业的服务支持。以下是对洛杉物理服务器的详细介绍。 1. 优质的性能 稳定的网络连接:洛杉矶物理服务器位于先进的数据…

day32+学习记录

一.算法练习 509.斐波那契数 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n) F(n - 1) F(n - 2)&#xf…