一次缓存性能问题排查

栏目: 数据库 · 发布时间: 6年前

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

概述

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

压测数据分析

全局图预览

一次缓存性能问题排查

一次缓存性能问题排查

通过对某直播观看页面进行高并发压测,在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、深入排查代码挖本质

微信公众号:乐少黑板报


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

图说区块链

图说区块链

徐明星、田颖、李霁月 / 中信出版社 / 2017-7-1 / 59.00元

区块链,如瑞士仪表般精密,如互联网般惊世骇俗,它在以神一般的节奏颠覆社会。 当新兴技术来临时,你可以选择规避——如果明天也可以规避的话。区块链也一样。 作为一个现象级概念,金融科技创新在过去几年迎来了奇点式发展。其中最引人注目的当属区块链技术。区块链技术正在动摇全球金融基础设施,它是全球顶级银行和其他金融机构重点追逐的领域。毫无疑问,区块链是未来5年最有前景的行业之一。 《图说区......一起来看看 《图说区块链》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具