千家信息网

一次缓存性能问题排查

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

概述

以下分享的都跳过了很多坑,包括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安全错误 数据库的锁怎样保障安全 手机点不出去总是显示服务器异常 达梦数据库的版本和授权怎么查看 软件开发ppt 管理经验 app软件出现没有可用服务器 淄博智慧医养软件开发 360上网代理服务器 广电网络安全体系构架 t将图片路径保存到数据库 国外域名解析服务器 婕斯公司的服务器 分离后的数据库到哪儿找 天龙八部服务器多少人才爆满 ccat网络安全工程师 数据库技术与其他技术的集合 湖北省中小学网络安全宣传周 青年文学家杂志收录数据库 软件工程可以从事网络安全吗 数据库中如何将裂变为行显示 电气自动化对比计算机网络技术 服务器最大内存和可分配内存 网络安全保密协议书 华为服务器日志收集 昆明电视台校园网络安全 网络安全法根本修改 网络安全宣传周启动仪式简报 平安科技移动互联网团队 gbase 数据库备份 mc手机版服务器ip 打开电脑提示与服务器通信失败 拉萨网络安全实战特训营
0