文档章节

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

燃犀
 燃犀
发布于 2017/07/26 09:23
字数 861
阅读 26
收藏 0
点赞 0
评论 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
博文 17
码字总数 14049
作品 0
杭州
程序员
redis单线程模型分析

redis原理 redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大。 不过,因为一般的内存操作都是简单存取操作,线程占用时间相对较短,主要问题在io上,因...

令飞 ⋅ 2015/05/03 ⋅ 3

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

redis超时原因排查

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

Andy-xu ⋅ 2016/04/02 ⋅ 0

性能优化技巧知识梳理(3) - 如何排查列表卡顿问题

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

泽毛 ⋅ 06/20 ⋅ 0

云数据库调优(一)

之前负责trove产品化的同事负责监控去了,所以我接过RDS调优的活。 我们的方案是通过trove创建主、备,另外还允许创建若干个只读数据库来保障数据库的可用性。可是创建主、备的过程慢,给人的...

Jun_Wong ⋅ 2017/12/08 ⋅ 0

Redis时延问题分析及应对

Redis时延问题分析及应对 Redis的事件循环在一个线程中处理,作为一个单线程程序,重要的是要保证事件处理的时延短,这样,事件循环中的后续任务才不会阻塞; 当redis的数据量达到一定级别后...

古城寨主 ⋅ 2017/11/15 ⋅ 0

Redis 高级特性与性能调优

Redis 高级特性与性能调优 运维生存时间 - 运维生存时间2017-12-013 阅读 redisRedis 发表评论 A+ 所属分类: Redis 概述 Redis 是一个开源的,基于内存的结构化数据存储媒介,可以作为数据库...

运维生存时间 - 运维生存时间 ⋅ 2017/12/01 ⋅ 0

关于Redis的一些思考和总结

日常的业务系统中经常使用到redis,平时也会研究下redis的设计文档和源码,对redis的使用场景、实现方案、运维要点这些常规知识点都有所了解,但是零零碎碎总感觉不够系统,这里结合源码对自...

zqrferrari ⋅ 2017/11/21 ⋅ 0

java爬虫进阶篇(半小时知乎两万推荐问题)

上一篇写了一个简单的新浪新闻爬虫作为上手主要是用jsoup包来对url页面进行抓取到本地,并在本地进行数据的解析提取。这里就不重复叙述jsoup的用法了,百度一下基本一大片。看了网上大神们都...

xixi哈哈1 ⋅ 2017/12/31 ⋅ 0

如何用Redlock实现分布式锁

转载请标明出处: http://blog.csdn.net/forezp/article/details/70305336 本文出自方志朋的博客 之前写过一篇文章《如何在springcloud分布式系统中实现分布式锁?》,由于自己仅仅是阅读了相...

forezp ⋅ 2017/04/20 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

DevOps 资讯 | PostgreSQL 的时代到来了吗 ?

PostgreSQL是对象-关系型数据库,BSD 许可证。拼读为"post-gress-Q-L"。 作者: Tony Baer 原文: Has the time finally come for PostgreSQL?(有删节) 近30年来 PostgreSQL 无疑是您从未听...

RiboseYim ⋅ 4分钟前 ⋅ 0

Cube、Cuboid 和 Cube Segment

1.Cube (或Data Cube),即数据立方体,是一种常用于数据分析与索引的技术;它可以对原始数据建立多维度索引。通过 Cube 对数据进行分析,可以大大加快数据的查询效率 2.Cuboid 在 Kylin 中特...

无精疯 ⋅ 42分钟前 ⋅ 0

github太慢

1:用浏览器访问 IPAddress.com or http://tool.chinaz.com 使用 IP Lookup 工具获得github.com和github.global.ssl.fastly.net域名的ip地址 2:/etc/hosts文件中添加如下格式(IP最好自己查一...

whoisliang ⋅ 44分钟前 ⋅ 0

非阻塞同步之 CAS

为解决线程安全问题,互斥同步相当于以时间换空间。多线程情况下,只有一个线程可以访问同步代码。这种同步也叫阻塞同步(Blocking Synchronization). 这种同步属于一种悲观并发策略。认为只...

长安一梦 ⋅ 54分钟前 ⋅ 0

云计算的选择悖论如何对待?

人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云计算为...

linux-tao ⋅ 57分钟前 ⋅ 0

Redis 注册为 Windows 服务

Redis 注册为 Windows 服务 redis 注册为 windows 服务相关命令 注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 启动服务 re......

Os_yxguang ⋅ 58分钟前 ⋅ 0

世界那么大,语言那么多,为什么选择Micropython,它的优势在哪?

最近国内MicroPython风靡程序界,是什么原因导致它这么火呢?是因为他功能强大,遵循Mit协议开源么? 错!因为使用它真的是太舒服了!!! Micropython的由来,这得益于Damien George这位伟大...

bodasisiter ⋅ 今天 ⋅ 0

docker 清理总结

杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有已经停止的容器(docker rm没有加-f参数,运行中的容器不会删掉) docker rm $(docker ps -a -q) 删除所有未打 dangling 标...

vvx1024 ⋅ 今天 ⋅ 0

关于学习

以前学车的时候,教练说了这样的一句话:如果一个人坐在车上一直学,一直学,反而不如大家轮流着学。因为一个人一直学,就没有给自己留空间来反思和改进。而轮流着学的时候大家下来之后思考上...

mskk ⋅ 今天 ⋅ 0

压缩工具之gzip-bzip2-xz

win下常见压缩工具:rar zip 7z linux下常见压缩工具:zip gz bz2 xz tar.gz tar.bz2 tar.xz gzip 不支持目录压缩 gzip 1.txt #压缩。执行后1.txt消失,生成1.txt.gz压缩文件 gzip -d 1.txt....

ZHENG-JY ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部