线上后端接口响应过慢排查记录_MySQLthread cache命中率过低导致的接口响应慢

news2024/11/28 16:46:45

文章目录

  • 问题现象
  • 初步排查+调整
  • 临时解决措施
  • 问题二次定位+原因分析
  • 为什么会出现异常

问题现象

9点多,运营同学反馈系统某模块业务响应很慢,登录系统查看,后端接口响应耗时很久,需要好几秒;
查看对应的服务器资源情况,cpu使用率80%左右(10点多之后cpu使用率90%+),内存使用率70%左右,系统负载不低(服务器4核),波动比较厉害,10点多之后1min负载达到40左右;
在这里插入图片描述

初步排查+调整

问题现象1:查看stackTrace+pinpoint,获取数据库连接在等待;
在这里插入图片描述
在这里插入图片描述

问题现象2:大量的fullGC;下图是相关服务运行一段时间后的gc采集信息,FullGC的次数超过了YoungGC的一半;猜测是新生代太小,导致触发了大量的full gc;
在这里插入图片描述

针对上面两个问题点进行调整,适当增加了应用的jvm新生代内存大小(由1G调整为1.5G),增加了数据库连接池的大小;更新服务后发现系统响应仍然很慢;
gc的情况有明显改善,但数据库连接仍有大量的等待;观察mysql的连接使用是充足的;
保存了一个dump的文件,留待后面分析;

临时解决措施

扩容了一个节点,均分流量,系统响应正常,cpu、负载显著下降;cpu使用率降到40%左右,系统1min负载降到5以下;

问题二次定位+原因分析

  • 分析异常时段,其他的业务服务响应正常,确认只有某一个服务有异常;

  • 基于前面保存的dump分解分析,发现应用druid的mysql连接池大小调整未生效,查看对应的配置,应用程序配置了多个数据源,业务调整,新增了数据源配置,新增的数据源被定义为@Primary(两个数据源使用的是同一个物理db),调整的是原来业务定义的数据源连接池大小,故不生效;

  • 正确调整连接池大小后,流量切换到原来的节点上,问题仍存在;可疑点:jstack中分析发现大量http线程池在等待锁(mysql获取连接或者释放连接时的锁)。查看dump文件,连接池中仍有缓存的连接,连接和释放连接时正常的;说明本次不是连接池大小不够,翻源码没有找到头绪;
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 查看MySQL的thread cache,发现过低,不到70%
    在这里插入图片描述

  • 将thread_cache_size由32调整为64后,变动时段的thread缓存命中率提升为83.2%左右,后调整为96,命中率超过90%,符合预期;然后将流量全部切换到原来的节点上,运行一天,系统响应耗时正常,和最开始一个节点运行时对比,业务高峰期的cpu、内存、系统负载情况,内存使用率略有增长(jvm调大了512M),CPU偶尔80%+,基本稳定在75%以下,系统负载比之前有明显下降。
    在这里插入图片描述

  • 在上一步的基础上,业务高峰期增加系统的负载(压缩大文件),CPU使用率90%以上,系统负载上升,系统接口响应耗时很长,和最开始的问题现象类似;文件压缩结束后,响应恢复正常;后发现MySQL还有一些其他的需要优化点,另服务器本身的负荷比较高,需要扩容;

为什么会出现异常

  • 基于请求分析,系统响应慢的前一天服务升级,有一个核心的业务行为进行了调整,导致系统的qps上升了一倍

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

纸箱视觉定位抓取软硬件方案

【检测目的】 产品定位抓取 【客户要求】 精度为0.1mm 【拍摄与处理效图一】 【拍摄与处理效图二】 【拍摄与处理效图三】 【拍摄与处理效图四】 【拍摄与处理效图五】 【实验原理及说明】 【实验原理及说明】 【实验原理及说明】 【方案评估】 根据目前的图像和处理结果来看…

数据结构与算法——数据结构有哪些,常用数据结构详解

数据结构是学习数据存储方式的一门学科,那么,数据存储方式有哪几种呢?下面将对数据结构的学习内容做一个简要的总结。 数据结构大致包含以下几种存储结构: 线性表,还可细分为顺序表、链表、栈和队列;树结…

云计算的学习(二)

二、计算虚拟化 1.计算虚拟化的介绍 1.1虚拟化简介 a.什么是虚拟化 将物理设备逻辑化,转化成文件或者文件夹,这个文件或文件夹一定包含两个部分:一部分用于记录设备配置信息,另一部分记录用户数据。 虚拟机摆脱了服务器的禁锢…

Centos7安装go语言环境

Centos7安装go语言环境 文章目录 下载解压缩配置变量验证已安装 下载 从go语言官网下载对应的二进制存档包 wget https://dl.google.com/go/go1.12.linux-amd64.tar.gz解压缩 解压缩到/usr/local,将自动在其中创建一个Go树 /usr/local/go tar -C /usr/local -xz…

HashMap学习总结

1. JDK 1.8 主要进行了哪些优化? 1)底层数据结构从“数组链表”改成“数组链表红黑树”,主要是优化了 hash 冲突较严重时,链表过长的查找性能:O(n) -> O(logn)。 2)计算 table 初始容量的方式发生了改…

GLM 130B和chatGLM2-6B模型结构

GLM-130B 一、预训练 采用双向注意力机制,对被遮挡的部分及逆行预测, 可以自由设置单词mask,句子smask,文章gmask,可以根据任务的不同设置mask,文本理解设置单词级别mask,文本生成色湖之句子级别的gmask,glm130B中设置…

Streamsets binlog采集时区问题

通过Streamsets采集mysql binglog增量数据时候,出现数据库中datetime时区问题。 要注意一点是,streamsets的前端展示的时间也是有时区的,后端返回的数据是时间戳,等于做了两次时区的转换 后端binglog时区转换->时间戳->前端…

ELK日志记录——Kibana组件——grok 正则捕获插件

grok 正则捕获插件 grok 使用文本片段切分的方式来切分日志事件 内置正则表达式调用 %{SYNTAX:SEMANTIC} ●SYNTAX代表匹配值的类型,例如,0.11可以NUMBER类型所匹配,10.222.22.25可以使用IP匹配。 ●SEMANTIC表示存储该值的一个变量声明&…

Linux——SIGCHLD信号——第17号信号

目录 什么是僵尸进程? 僵尸进程的目的? 如何避免僵尸进程? 总结: 提到SIGCHLD信号,就不得不先说一个有关僵尸状态的进程知识点了。 什么是僵尸进程? 首先内核会释放终止进程(调用了exit系统调用)所使用的所有存情区,关闭所有打开的文…

计代码行数cloc,一个代码统计行数很好用的工具

分为window、mac系统区分,基本是一样的,一个代码统计行数很好用的工具。 CLOC简介 Cloc是一款使用Perl语言开发的开源代码统计工具,支持多平台使用、多语言识别,能够计算指定目标文件或文件夹中的文件数(files&#x…

Linux——sigaction信号捕捉函数

目录 一.sigaction () ; struct sigaction结构体的成员: sigaction()和signal()函数的区别: 二.sigaction函数的使用 sigaction函数使用案例1: 对该进程发送指定的信号 案例2:对该进程发送多个同类型的信号时: …

vim中文帮助文档安装

vim自带的帮助手册是英文的, 对平时编程的人来说没有多大阅读困难,在何况还有"星级译王"呢, 但是我猜和我一样连英语四级都愁的大有人,可偏偏就有一帮好心人人将其翻译成了中文, 可偏偏我又挡不住诱惑将它安装了, 唉.......又痛失一个学习英文的好机会, 下…

J2EE集合框架Map

目录 一.Map特点 1.无序,键值对,键不能重复,值可以重复 2.键重复则覆盖,没有继承Collection接口 二.遍历方式 1.拿到key,再拿值2.拿到映射关系,键值都有 取出保存所有Entry的Set,再遍历此Set即可 三.HashMap与H…

SpringBoot实现返回值数据脱敏

介绍 SpringBoot实现返回数据脱敏 有时,敏感数据返回时,需要进行隐藏处理,但是如果一个字段一个字段的进行硬编码处理的话,不仅增加了工作量,而且后期需求变动的时候,更加是地狱般的工作量变更。 下面&am…

HLS入门简述

What‘s HLS? HLS(High-Level Synthesis)高层次综合。何谓高层次?意味着我们可以使用高层次的语言来对设计进行描述,如C,C,System C等;那何谓综合呢?HLS在其中起了重要的…

Denosing score matching (公式+代码)

加噪声的分数匹配 def anneal_dsm_score_estimation(scorenet, samples, labels, sigmas, anneal_power2.):# 取出每个样本对应噪声级别下的噪声分布的标准差,即公式中的sigma_i,# 这里的 labels 是用于标识每个样本的噪声级别的,就是 i&…

JavaEE——常见的锁策略、CAS、synchronized 原理(八股)

文章目录 一、常见的锁策略1.乐观锁 & 悲观锁2.轻量级锁 & 重量级锁3.自旋锁 & 挂起等待锁4.互斥锁 & 读写锁5. 公平锁 & 非公平锁 二、CAS1、什么是 CAS2. CAS 的应用场景2.实现自旋锁3. CAS 中的 ABA 问题 三、 Synchronized 原理 一、常见的锁策略 当前…

DataFun: ChatGPT背后的模型详解

ChatGPT背后的模型详解 Overview Transofrmer 各个构件都有一定的作用 Multi-head self attention 每个字的重要性不一样,学习QKV三个矩阵(query,key,value) 多组QKV RLHF ChatGPT训练过程 思维链 COT

C++_简单模拟实现string的基本结构

C中,string早于STL问世。使用string中的构造函数可以实现对string类型的字符串的一系列操作。 今天来模拟C中的string的基本结构。注意仅仅是简单模拟,string内部结构其实非常复杂,并且不同版本的IDEstring的内部结构也不尽相同。尽管有所不…

SpringBoot2+Vue2实战(十五)高德地图集成

1.地图官网&#xff1a; 高德开放平台 | 高德地图API 2.开发文档(web js) 正式集成&#xff1a; 1.再index.html中引入script标签 <script type"text/javascript" src"https://webapi.amap.com/maps?v2.0&key您申请的key值"></script>…