Redis 响应延迟问题排查

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

最近数据量愈来愈多,并发写操做不少的状况下,Redis出现响应慢的状况;ios

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

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

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

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

  • 硬件,系统:硬件问题是全部问题最底层的问题了,若是硬件慢,例如CPU主频低,内存小,磁盘IO慢,这些会让全部运行在上面的系统响应慢;另外,使用虚拟机会让系统运行的性能太为降低;固然,有钱的话,这问题很容易解决;系统方面,Linux自己的系统资源调度也会产生必定的延时。这些通常不会很大,能够忽略不计;服务器

  • 网络:若是客户端和redis在同一台服务器上,使用socket创建链接会比监听 TCP/IP 端口快不少;网络

  • Redis命令:一些时间复杂度比较高的命令,如 lrem,sort,sunion等命令会花比较长时间;另外,大量的重复链接也会形成延时,重用链接是一种很好的品质;若是有大量写操做,可使用 pipeline 管道的方式(相似mysql事务),一次性提交,这样数据量也少了,链接次数也少了,不用每次都返回数据,速度天然会快不少;并发

  • 持久化:Redis持久化须要fork出一个进程来进行持久化操做,这自己就会引起延时,若是数据变化大,RDB配置时间短,那这个代价仍是挺大的;再加上,硬盘这东西真有点不靠谱,若是仍是虚拟机上的虚拟硬盘,若是仍是NFS共享目录,那这延时会让你崩溃。因此,若是系统不须要持久化,关了吧。socket


Redis提供了SlowLog能够供咱们分析执行速度慢的命令,能够分析一下;操做系统方面,可使用 iostat 查看一下硬盘速度,使用 vmstat 查看一下内存分页状况;性能

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

相关文章
相关标签/搜索