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

文章目录

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

问题现象

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.hqwc.cn/news/19799.html

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

相关文章

Django实现简单的音乐播放器 4

在原有音乐播放器功能基础上,增加上传音乐功能。 效果: 目录 配置上传路径 配置路由 视图处理歌曲 引入类库 保存歌曲文件 模板上传 设置菜单列表 设置菜单列表样式 脚本设置 上传效果 1.显示菜单列表 2.点击上传歌曲 3.上传完成 4.查看保…

SpringBoot前后端分离项目,打包、部署到服务器详细图文流程

文章目录 实施步骤一、修改配置文件地址1.修改MySQL配置2.修改Redis配置3.修改日志路径和字符集配置 二、将源码压缩并上传服务器1.上传前端文件2.上传后端文件(同上) 三、前端项目打包1.安装依赖2.项目打包 四、后端项目打包1.项目打包(jar包…

一次零基础靶机渗透细节全程记录

一、打靶总流程 1.确定目标: 在本靶场中,确定目标就是使用nmap进行ip扫描,确定ip即为目标,只是针对此靶场而言。其他实战中确定目标的方式包括nmap进行扫描,但不局限于这个nmap。 2.信息收集: 比如平常挖…

【Matlab】智能优化算法_非洲秃鹫优化算法AVOA

【Matlab】智能优化算法_非洲秃鹫优化算法AVOA 1.背景介绍2.数学模型3.文件结构4.算法流程图5.伪代码6.详细代码及注释6.1 AVOA.m6.2 boundaryCheck.m6.3 exploitation.m6.4 exploration.m6.5 initialization.m6.6 levyFlight.m6.7 main.m6.8 ObjectiveFunction.m6.9 random_se…

前端处理后端返回的文件流,进行文件下载

二进制流格式 Blob格式 前言: 需求:根据后端接口返回的文件流进行数据处理,并实现文件的下载,且下载文件为word文档. 代码实现: //下载文件 async function DownLoadFile(row) {let res await DownLoadFileAPI(row.…

目标检测学习

目录 1、目标定位 2、特征点检测 3、目标检测 4、滑动窗口的卷积实现 5、Bounding Box 预测(Bounding box predictions) 6、交并化 7、非极大值抑制 8、Anchor Boxes 9、YOLO算法 1、目标定位 2、特征点检测 如何检测特征点(以人的部…

【UE4 C++】根据指定路径生成静态网格体

在上一篇博客中(【UE C】蓝图调用C函数),我们用C创建了一个蓝图函数库,本篇文章在这个蓝图函数库基础上增加一个方法,该方法只需输入一个文件目录路径,就可在场景中生成该目录下得所有静态网格体。&#xf…

ChatGPT对高校人才培养模式的挑战与应对策略思考

酷吗?输入指令后直接就能生成一大串代码,即使不懂相关技术也能玩转编程,这就是ChatGPT赋予你的“新能力”,除了写代码,ChatGPT还能帮你执行各种五花八门的任务。 AI工具如ChatGPT在行业中的广泛应用对于行业的人才结…

解密Sketch文件打开秘籍:简单两步操作!

虽然Figma,sketch,xd都很好用,但是设计师在设计工作流中经常会遇到无法在这三者软件中自由导入导出的情况。但是只要我们转变一下思路,因为这三种软件都支持导入sketch格式,所以我们只要将文件格式转成sketch,就能自由的在不同软件…

【华为鸿蒙3.0/荣耀安卓12使用VMOS Pro的激活方式】

关于华为鸿蒙3.0/荣耀安卓12如何解除进程限制,这里提供以下教程供小伙伴们参考。 需要准备:电脑一台,数据线一根。 第一步:打开手机USB调试模式。 确保USB数据线已连接手机和电脑,打开手机“开发者选项”&#xff0…

【Distributed】zookeeper+kafka的应用及部署

文章目录 一、zookeeper1. zookeeper的概述1.1 Zookeeper 定义1.2 Zookeeper 工作机制1.3 Zookeeper 特点1.4 Zookeeper 数据结构1.5 Zookeeper 应用场景1.6 Zookeeper 选举机制第一次启动选举机制非第一次启动选举机制选举Leader规则 2. 部署 Zookeeper 集群2.1 安装前准备2.2…

HarmonyOS学习路之开发篇—流转(多端协同 一)

多端协同开发 场景介绍 开发者在应用FA中通过调用流转任务管理服务、分布式任务调度的接口,实现多端协同。 主要流程如下: 设备A上的应用FA向流转任务管理服务注册一个流转回调。 Alt1-系统推荐流转:系统感知周边有可用设备后,主…