千家信息网

一次缓存性能问题排查

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,概述以下分享的都跳过了很多坑,包括redis、tomcat环境配置、机器硬件配置等等问题(与线上保持一致,或者硬件性能减配系数,例如线上:8C16G,压测:4C8G,系数简单相差2倍),直接把挖掘瓶颈
千家信息网最后更新 2025年02月01日一次缓存性能问题排查

概述

以下分享的都跳过了很多坑,包括redis、tomcat环境配置、机器硬件配置等等问题(与线上保持一致,或者硬件性能减配系数,例如线上:8C16G,压测:4C8G,系数简单相差2倍),直接把挖掘瓶颈的主要思路搬出台面。

压测数据分析

全局图预览

cdn.xitu.io/2018/11/29/1675ebca0b8bfcb2?w=1919&h=880&f=png&s=125839">



通过对某直播观看页面进行高并发压测,在APM(Pinpoint)监控中发现一个有趣的地方:

上图中两个红框中的数据(接近10s),相隔大概30分钟就发生,16:20左右,系统撑不住服务出现异常不可用,怀着好奇的心态,追查方法调用的栈,如下图所示:

该方法耗时多久呢?首先搞清楚Call Tree里面的一些概念:

可见这个sql查询方法耗时14秒多,为什么呢?APM里面已经显示了sql语句,在mysql中执行查询发现执行时间很快,那么问题出在哪里呢?只能继续深挖!

通过对比同样的url,请求响应毫秒级的情况下,发现数据如下图所示:

从redis获取到数据后,并没有再执行sql查询了,通过这个分析,我们决定追踪代码还原真相(不懂代码的测试不是好开发):

可以看到缓存失效之后,直接查询数据库了

解决方案

SQL优化:优先级低

从数据分析来看,sql优化的用处不大,并不是返回了大量数据缺少索引,此次可以跳过。

缓存并发:优先级高

  出现场景:当网站并发访问高,一个缓存如果失效,可能出现多个进程同时查询DB,同时设置缓存的情况,如果并发确实很大,这也可能造成DB压力过大,还有缓存频繁更新的问题。
  处理方法:对缓存查询加锁,如果KEY不存在,就加锁,然后查DB入缓存,然后解锁;其他进程如果发现有锁就等待,然后等解锁后返回数据或者进入DB查询。



经验总结

1、善用监控工具,例如APM,进行链路监控、服务器性能、方法调用顺序观察

2、追踪方法栈和相关日志

3、深入排查代码挖本质


微信公众号:乐少黑板报



数据 缓存 查询 方法 问题 代码 分析 监控 性能 优先级 同时 情况 数据分析 硬件 系数 进程 服务 配置 很大 有趣 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络数据库设计模板 鸡西市网络安全宣传周 联通猫架web服务器 达梦数据库给角色授管理员权限 如何备份一个数据库的表结构 数据库被锁了是永久的吗 数据库自动读取时间 上海市服务器机房配电系统 软件开发行业成本率 网络技术培训学校好吗 腾讯的服务器有多少块硬盘组成 计算机网络技术论文答辩问题 现代大型数据库系B 服务器无法安装虚拟机软件 网络技术服务工作方案 怎么下载微信无法连接到服务器 做网站一般用jsp和数据库 文档管理服务器kass 阿里巴巴唐超数据库 网络安全主题班会大学生 三五互联做软件开发好吗 滨江区 软件开发 济南软件开发公司外包项目 我的世界国际服服务器怎么做 合肥软件开发王涛 上海软件开发人日单价怎么评估 网络安全之渗透安全 计算机网络技术在什么学院 雅安软件开发行业标准 联想s服务器远程管理卡
0