Redis 响应延迟问题排查

参考原文:http://redis.io/topics/latency

最近数据量越来越多,并发写操作很多的情况下,Redis出现响应慢的情况;

可以使用 Redis命令来测试一下redis的响应速度:

redis-cli --latency -h ‘xxx‘ -p ‘xxxx‘

这条命令会向Redis插入示例数据来检查平均延时。 Ctrl+C可以随时结束测试;

下面我们列一下会出现延时的可能:

  • 硬件,系统:硬件问题是所有问题最底层的问题了,如果硬件慢,例如CPU主频低,内存小,磁盘IO慢,这些会让所有运行在上面的系统响应慢;另外,使用虚拟机会让系统运行的性能太为下降;当然,有钱的话,这问题很容易解决;系统方面,Linux本身的系统资源调度也会产生一定的延时。这些一般不会很大,可以忽略不计;
  • 网络:如果客户端和redis在同一台服务器上,使用socket建立连接会比监听 TCP/IP 端口快很多;
  • Redis命令:一些时间复杂度比较高的命令,如 lrem,sort,sunion等命令会花比较长时间;另外,大量的重复连接也会造成延时,重用连接是一种很好的品质;如果有大量写操作,可以使用 pipeline 管道的方式(类似mysql事务),一次性提交,这样数据量也少了,连接次数也少了,不用每次都返回数据,速度自然会快很多;
  • 持久化:Redis持久化需要fork出一个进程来进行持久化操作,这本身就会引发延时,如果数据变化大,RDB配置时间短,那这个代价还是挺大的;再加上,硬盘这东西真有点不靠谱,如果还是虚拟机上的虚拟硬盘,如果还是NFS共享目录,那这延时会让你崩溃。所以,如果系统不需要持久化,关了吧。

Redis提供了SlowLog可以供我们分析执行速度慢的命令,可以分析一下;操作系统方面,可以使用 iostat 查看一下硬盘速度,使用 vmstat 查看一下内存分页情况;

整体优化好,系统响应才会更快;

时间: 2024-12-17 10:50:05

Redis 响应延迟问题排查的相关文章

redis 性能监控和排查

1. INFO info指令返回服务器相关信息,包括: server: General information about the Redis server clients: Client connections section memory: Memory consumption related information persistence: RDB and AOF related information stats: General statistics replication: Mast

基于redis的延迟消息队列设计

需求背景 用户下订单成功之后隔20分钟给用户发送上门服务通知短信 订单完成一个小时之后通知用户对上门服务进行评价 业务执行失败之后隔10分钟重试一次 类似的场景比较多 简单的处理方式就是使用定时任务 假如数据比较多的时候 有的数据可能延迟比较严重,而且越来越多的定时业务导致任务调度很繁琐不好管理. 队列设计 目前可以考虑使用rabbitmq来满足需求 但是不打算使用,因为目前太多的业务使用了另外的MQ中间件. 开发前需要考虑的问题? 及时性 消费端能按时收到 同一时间消息的消费权重 可靠性 消息

网站访问慢延迟高排查

今天早晨9点左右,手机app收到邮件报警,打开一看,提示某个ip上的站点访问异常, 尝试ssh连接,发现非常慢.无法正常连接上去.一会后能正常连接上去,但是延迟很高,基本上无法操作. 更换一下ssh方式,通过相同内网的其他机器ssh登陆后,发现正常.PS:其实在这里的时候就应该可以初步断定是外网网络的问题了. top查看,cpu,内存正常,netstat查看web连接数,并发数300左右.对于apache+php+mysql的站点来说,这样的并发毫无压力.io也正常. 停止httpd服务,网络恢

MySQL数据库运维之主从复制延迟问题排查

上篇文章介绍了单机环境下的MySQL主从异步复制和主从半同步复制的搭建过程.搭建过程很简单,但是在实际使用过程中,更多的是解决问题,本篇文章将介绍一下MySQL主从复制中常见的问题以及如何定位问题和如何解决问题. 一.从库复制延迟问题 1.可能的原因如下(1)主从服务器处于不同的网络之中,由于网络延迟导致:(2)主从服务器的硬件配置不同,从服务器的硬件配置(包括内存,CPU,网卡等)远低于主服务器:(3)主库上有大量的写入操作,导致从库无法实时重放主库上的binlog:(4)主库上存在着大事务操

iOS开发中didSelectRowAtIndexPath tap事件响应延迟

为UITableViewCell添加tapped事件,代码如下: class VideoViewController: UIViewController , UITableViewDataSource,UITableViewDelegate { //... func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { // 播放框背景图片 let imageName : Str

redis启动失败的排查

今早还才7点钟,公司说app挂了,相关开发瞬间绷起神经,一时间群魔乱舞,最终到我这儿需要重新启动redis,于是乎我到公司第一件事就是查看关于redis的问题. 开机,xhell连上服务器,网速太慢,xhell卡顿,以为网速问题,打开宝塔,宝塔界面正常打开,里面的redis点击重启,重启失败,重新加载配置,失败,启动,毫无疑问,依然失败.那么问题就只能在服务器里看了.于是开始我排错步骤:第一步:启动redis的同时,查找日志.悲剧的是redis没有启动日志,找到redis的配置文件,添加启动日志

httpClient请求响应延迟

客户端可以先向服务器端发送一个请求,如果服务器端返回的是状态码100,那么客户端就可以继续把请求体的数据发送给服务器端.这样在某些情况下可以减少网络开销. 再看看HttpClient里面对100-Continue的说明: The purpose of the Expect: 100-Continue handshake is to allow the client that is sending a request message with a request body to determine

移动端300毫秒事件响应延迟解决方法[fastclick]

vue-cli[2.x]中: 安装 npm install fastclick --save 使用: 在main.js中 :先 import fastClick from 'fastclick' 然后 fastClick.attach(document.body) import Vue from 'vue' import App from './App' import router from './router' import fastClick from 'fastclick' import

Redis性能问题排查解决手册(七)

阅读目录: 性能相关的数据指标 内存使用率used_memory 命令处理总数total_commands_processed 延迟时间 内存碎片率 回收key 总结 性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息.通过这些信息来分析文章后面提到的一些性能指标. info命令输出的数据可分为10个类别,分别是: server clients memory persistence stats replication