文档章节

redis操作耗时较高问题排查记录

燃犀
 燃犀
发布于 2017/07/26 09:23
字数 861
阅读 112
收藏 0

1、问题描述


某系统在2017/07/21监控高耗时交易时发现在两个时间点缓存操作耗时较高,详情如下:
时间点一:2017/07/21  15:24:51

LogTime=2017-07-21 15:24:51.242 costTime=372.078ms class=com.dap.cache.api.CacheClien


时间点二: 2017/07/21  15:31:16

LogTime=2017-07-21 15:31:16.412 costTime=455.279ms class=com.dap.cache.api.CacheClient

2、排查过程


2.1慢日志配置


生产环境redis配置了慢日志参数
查看redis慢日志配置,登陆redis服务器,使用redis-cli客户端连接redis  server
 

127.0.0.1:6301> config get slow*
1) "slowlog-log-slower-than"
2) "10000"
3) "slowlog-max-len"
4) "1000"
127.0.0.1:6301> 

慢日志说明:
config  get  slow* 查询有关慢日志的配置信息

查询结果第一条:  1) "slowlog-log-slower-than" 慢日志阈值配置项
查询结果第二条:  2) "10000" 阈值 ,单位微秒,此处为10毫秒,即超过10毫秒的操作都会记录下来
查询结果第三条:  3) "slowlog-max-len"  慢日志记录保存数量,如果保存数量已满,会删除最早的记录,最新的记录追加进来
查询结果第四条:  4) "1000" 慢日志记录保存数量的阈值,此处保存1000条记录

查看慢日志记录


查看redis慢日志记录,登陆redis服务器,使用redis-cli客户端连接redis  server
生产环境有三个节点,慢日志记录分别如下:
节点一:
 

127.0.0.1:6301> SLOWLOG GET
 1) 1) (integer) 68
    2) (integer) 1500873303
    3) (integer) 25972
    4) 1) "BGREWRITEAOF"
 2) 1) (integer) 67
    2) (integer) 1500778503
    3) (integer) 25279
    4) 1) "BGREWRITEAOF"
 3) 1) (integer) 66
    2) (integer) 1500680103
    3) (integer) 24432
    4) 1) "BGREWRITEAOF"
 4) 1) (integer) 65
    2) (integer) 1500621891
    3) (integer) 1186934
    4) 1) "keys"
       2) "*CAP:*"
 5) 1) (integer) 64
    2) (integer) 1500621779
    3) (integer) 1190078
    4) 1) "keys"
       2) "*"
 6) 1) (integer) 63
    2) (integer) 1500602102
    3) (integer) 22998
    4) 1) "BGREWRITEAOF"
 7) 1) (integer) 62
    2) (integer) 1500530702
    3) (integer) 22807
    4) 1) "BGREWRITEAOF"
 8) 1) (integer) 61
    2) (integer) 1500458102
    3) (integer) 21908
    4) 1) "BGREWRITEAOF"
 9) 1) (integer) 60
    2) (integer) 1500424802
    3) (integer) 21208
    4) 1) "BGREWRITEAOF"
10) 1) (integer) 59
    2) (integer) 1500352202
    3) (integer) 20436
    4) 1) "BGREWRITEAOF"
127.0.0.1:6301>


慢日志说明:

SLOWLOG  GET 查询当前所有的慢日志记录

显示结果列表,最左侧 1) 到 10) 有10条记录
已第四条慢日志为例说明如下:

4) 1) (integer) 65
    2) (integer) 1500621891
    3) (integer) 1186934
    4) 1) "keys"
       2) "*CAP:*"

 

4)  1) (integer) 65 值65数据类型为integer,表示该条日志的id
2) (integer) 1500621891  值1500621891数据类型为integer,表示操作redis的unix时间戳,单位秒。
3) (integer) 1186934 操作耗时,单位微秒
4)  1) "keys" 操作redis的命令 keys
2) "*CAP:*" 操作redis的命令keys 的参数,即查询所有包含CAP字符串的key

 

把操作redis的unix时间戳换算成北京时间为 2017/7/21 15:24:51 ,与某系统交易耗时的日志时间点一吻合。某系统交易耗时时间点二的问题也是如此。

结论:
Redis命令keys * 、 keys *xxx* 会遍历所有key,以查找符合条件的key,当数据量较大时该命令比较耗时,因为redis是单线程,当该命令执行的过程当中会阻塞其他命令请求,如果此时应用系统请求redis,所有的请求都会等待。在生环境中,严禁使用keys * 、 keys *xxx*,最好的办法是禁用相关命令。

补充说明:慢日志中的"BGREWRITEAOF"是redis fork的另外的线程在执行aof文件重新,该操作不会影响应用对redis的读写请求。


 

© 著作权归作者所有

共有 人打赏支持
燃犀

燃犀

粉丝 0
博文 25
码字总数 18797
作品 0
杭州
程序员
私信 提问
Redis 性能问题排查:slowlog 和排队延时

一、Redis Slowlog介绍 [Redis Slowlog]是排查性能问题关键监控指标。它是记录Redis queries运行时间超时特定阀值的系统。 这类慢查询命令被保存到Redis服务器的一个定长队列,最多保存slowl...

IT--小哥
10/08
0
0
携程一次Redis迁移容器后Slowlog“异常”分析

容器化对于Redis自动化运维效率、资源利用率方面都有巨大提升,携程在对Redis在容器上性能和稳定性进行充分验证后,启动了生产Redis迁移容器化的项目。其中第一批次两台宿主机,第二批次五台...

Docker
12/06
0
0
redis超时原因排查

1.低效操作产生的延迟。单命令操作一半很快不会造成这样,SORT,LREM, SUNION,keys ,* 等操作都会影响响应时间。 使用进程监控程序(top, htop, prstat, 等...)来快速查看Redis进程的CPU...

Andy-xu
2016/04/02
3.1K
0
性能优化技巧知识梳理(3) - 如何排查列表卡顿问题

一、前言 如果现在用户反馈某个列表很卡,你会怎么排查问题? 这样一个简短的问题,其实考察了我们多方面的知识。要答出其中的一两个小点其实并不难,难的是如何能够由外之内,由浅入深娓娓道...

泽毛
06/20
0
0
Nginx错误日志与优化专题

一、Nginx配置和内核优化 实现突破十万并发 二、一次Nignx的502页面的错误记录 (1)错误页面显示 错误日志: 2017/07/17 17:32:57 [error] 29071#0: *96 recv() failed (104: Connection re...

tinywan1227
2017/04/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

使用form表单同时实现上传文件和提交文本数据

使用form表单同时实现上传文件和提交文本数据,此示例中在后台将文件上传到阿里的oss存储服务器中 申请oss相关账号: endpoint = "http://oss-cn-qingdao.aliyuncs.com"; accessKeyId = "key"...

貔貅叔
9分钟前
1
0
结合实际场景谈一谈微服务配置

作为 Nacos 5W1H 的系列文章,本文将围绕“Where”,讲述 Nacos 配置管理的三个典型的应用场景: 数据库连接信息 限流阈值和降级开关 流量的动态调度 上一篇:Nacos帮我解决了什么问题? 数据...

阿里云云栖社区
12分钟前
1
0
在Windows安装运行Kafka

https://www.cnblogs.com/flower1990/p/7466882.html 一、安装JAVA JDK 1、下载安装包 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 注意:根据3......

洛水
13分钟前
1
0
插件

sftp Bracket Pair Colorizer Guides Auto Rename Tag Chinese (Simplified) Language Pack for Visual Studio Code...

dragon_tech
14分钟前
1
0
Missing Number(leetcode268)

Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array. Example 1: Input: [3,0,1]Output: 2 Example 2: Input: [9,6......

woshixin
18分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部