单一接口优化过程全记录(主要涉及Redis)
接口优化过程记录
问题背景
某个接口耗时长(247ms),但里面逻辑不算复杂,只进行了简单的对象引用以及操作了多次Redis
步骤1:链路追踪,确定业务耗时点
接口里通过链路追踪以及日志查询发现主要是操作Redis的这条链路耗时变长
步骤2:从Redis找问题,列出可能点
原因可能是:
- Redis本身存在问题,可能是命令复杂度、IO、连接数不够、过载等
- 网络原因,获取连接或者是数据传输耗时
经测试发现以下这些问题
使用本机ping服务器,网络延迟大概在42ms(ping内网<1ms,ping公司线上环境7ms),属于 高延迟
内部逻辑对获取Redis连接进行耗时记录,发现除首次获取连接需30ms,后续获取连接耗时 <1ms,
内部对Redis的一个get操作需要47ms(高耗时)
步骤二总结:
- 调用方与客户端的网络高延迟
- 普通的get操作需要47ms不排除Redis本身存在问题,需要继续排查
步骤3:从Redis内部排查
3.1从服务器内部查看延迟峰值
由于Redis是使用Docker搭建,在虚拟化环境可能会差一些,不过还是先查看延迟峰值以及平均响应时 间
100秒内测试结果
60秒内测试结果
从测试数据可以看出
- 在100秒时,最大延迟为16ms,处理了1,762,165,232次命令平均响应时间为0.053ms
- 在60秒时,最大延迟为14ms,处理了1,066,484,486次命令平均响应时间为0.056ms
总结:从这一测试数据看单一get命令是不会到40+ms
3.2设置慢命令时间
通过给Redis设置slowlog时间为5ms,从业务代码里操作set和get命令各200条,均无发现slowlog。
3.3命令复杂度过高(略)
接口里使用的命令只是简单的get,set操作,并不是SORT、SUNION等聚合类容易导致操作延迟变大的 命令。
且O(N)里的N值并不大,也不需要花费很多时间在数据协议的组装和网络传输过程中。
所以该指标不做测试。 Ps:若是想测试该指标也可用slowlog进行排查。
3.4bigkey(略)
接口里操作的都不是bigkey,该指标不做测试。有需要可先使用redis命令扫描bigkey。注意:扫描时与 上述提到的延迟峰值都会使Redis的OPS突增。
3.5集中过期(略)
该Redis里并没有过多数据,该指标不做测试。
3.6实例内存达到上限
从数据上来看,内存并没有使用很多。
3.7fork耗时严重(略)
如3.5中所说,该指标不做测试
3.8连接数问题
从springboot里使用了nio开发的lettuce Redis线程池,当设置连接数为500时,在代码层面开启多个线 程一直跑,Redis客户端连接数可以达到峰值,所以这块暂时没有问题。
暂时总结
根据上述数据总结出99%是网络问题造成的获取数据延迟。当然还有很多指标都没有列举,例如:是否 开启内存大页、是否开启AOF造成Redis、或者是是否使用Swap等。由于服务器的Redis也算比较简 单,这些也就默认是正常了
后续执行
后续可以再继续监控
- 观察连接数,是否有频繁的短连接消耗
- 以及对Redis的各个指标进行监控
单一接口优化过程全记录(主要涉及Redis)的更多相关文章
- 【JVM】JVM优化过程全记录
请大神移步:https://segmentfault.com/a/1190000010510968?utm_source=tuicool&utm_medium=referral 今天看JVM群 ...
- 在CentOS6上配置MHA过程全记录
在CentOS6上配置MHA过程全记录 MHA(Master High Availability)是一款开源的MariaDB or MySQL高可用程序,为MariaDB or MySQL主从复制架构 ...
- 在CentOS7上通过RPM安装实现LAMP+phpMyAdmin过程全记录
在CentOS7上通过RPM安装实现LAMP+phpMyAdmin过程全记录 时间:2017年9月20日 一.软件环境: IP:192.168.1.71 Hostname:centos73-2.sur ...
- SAP S4HANA1610/Fiori安装过程全记录
经历各种坑,从硬件到文件,终于安装成功. 有需要安装或使用S4HANA(含Fiori)的同学可以参考. 安装文件分享给大家 链接:http://pan.baidu.com/s/1mi7LfIS 密码: ...
- 华为悦盒 EC6108V9U 破解过程全记录(root扫盲) [原创]
电信宽带送的 IPTV 盒子,CPU 为 Hi3798M,1G 内存,8G 存储,支持 H.265 硬解码,系统为 Android 4.4.2,却只能看电视,岂不浪费?好在华为厚道,还是留了后门供 D ...
- C#打包制作安装程序过程全记录
该文是根据网上的文章并结合自己实际打包的过程而整理的. 开发平台:VisualStudio2005中文版. 步骤如下: 1. 创建一个安装向导项目或安装部署项目 新建项目-〉其他项目类型-〉安装与部署 ...
- 000 上传本地库到Github远程库过程全记录
20220613 Github上新创建了一个CsImage库,之后本地创建了一个对应名称的目录,并创建本地库,进行了上传操作,记录一下过程 1.Github上CsImage库创建完成 Github上创 ...
- LFS(Linux From Scratch)构建过程全记录(三):下载所需的软件包
写在前面 本文将记录构建LFS的过程中,下载软件包的全过程 准备下载的路径 注意请确保$LFS已经设置完毕 我们需要创建一个文件夹,地址为$LFS/sources,用于保存对应的源码 输入的指令如下: ...
- LFS(Linux From Scratch)构建过程全记录(二):磁盘分区
写在前面 本文将会详细记录LFS中,构建分区,构建文件系统和挂载分区的全过程 准备新硬盘 为了更加符合"从零开始构建Linux"的要求,我在虚拟机中,新建了一个磁盘 我们将会在这个 ...
- 在CentOS6上编译安装实现LAMP(php-modules)+phpMyAdmin安装过程全记录
php与apache协作有三种模式:CGI.modules.FastCGI. 在CGI模式下,用户请求php文件时,apache会启动响应进程,调用php处理器处理请求,然后将结果返回给客户端.用户响 ...
随机推荐
- 报时机器人的rasa shell执行流程分析
本文以报时机器人为载体,介绍了报时机器人的对话能力范围.配置文件功能和训练和运行命令,重点介绍了rasa shell命令启动后的程序执行过程. 一.报时机器人项目结构 1.对话能力范围 (1)能够 ...
- bootstrapValidator 参数校验框架
bootstrap:能够增加兼容性的强大框架. 因为项目需要数据验证,看bootstrapValidator 还不错,就上手一直,完美兼容,话不多说. 需要引用css: bootstrap.min.c ...
- JavaFx 使用字体图标记录
原文:JavaFx 使用字体图标记录 - Stars-One的杂货小窝 之前其实也是研究过关于字体图标的使用,还整了个库Tornadofx学习笔记(4)--IconTextFx开源库,整合5000+个 ...
- dotnet 用 SourceGenerator 源代码生成技术实现中文编程语言
相信有很多伙伴都很喜欢自己造编程语言,在有现代的很多工具链的帮助下,实现一门编程语言,似乎已不是一件十分困难的事情.我利用 SourceGenerator 源代码生成技术实现了一个简易的中文编程语言, ...
- 小程序返回上一级页面背景音乐报错 setBackgroundAudioState:fail title is nil!;
小程序初始化在onLoad的时候加载了一次背景音乐. 如果此时报错是title必传.如果没有 会报错一次 setBackgroundAudioState:fail title is nil!; 这个都 ...
- JVM中的堆
堆 内存结构 堆的核心概念 <java虚拟机规范>中对java堆的描述是:所有的对象实例以及数组都应当在运行时分配在堆上. 一个JVM实例只存在一个堆内存(就是new 出来一个对象),ja ...
- 一天一道Java面试题----第十二天(如何实现接口幂等性)
这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 1.如何实现接口幂等性 1.如何实现接口幂等性 唯一id.每次操作,都根据操作和内容生成唯一的id,在执行之前先判断id是 ...
- 齐博X1-新建一个空模板并在后台选择
本节实际操作建立一个空模板,并且让后台识别,选择该风格 先在index_style中建立一个目录,命名mystyle并上传我们在mystyle目录中建立一个info.php文件,代码如下:上传后,后台 ...
- 浅谈ORM-对象关系映射
目前.NET(C#)中比较流行的ORM框架: SqlSugar (国内) Dos.ORM (国内) Chloe (国内) StackExchange/Dapper (国外) Entity Framew ...
- 解决办法:ImportError:'module'object has no attribute 'check specifier'
在安装envsubst命令不存在的报错, 安装centos本地源, 再安装gettext) 在指定版本的时候发现还是报错根据后面提示指定44.0.0问题解决 pip install --upgrade ...