Redis 2.2 性能问题


系统环境:
CPU:E5620 X 2
Memory:96G
Disk:300G SAS
OS:CentOS 5
Redis:2.2.12

服务器创建了两个redis 实例:A和B
实例A内存占用200M多,有频繁的读写操作
实例B内存占用1G多,主要是读操作

系统每小时对实例A和B做一次bgrewriteaof
后端有针对实例A和B业务的可用性监控

问题:
当B实例做bgrewriteaof时候,A实例的业务访问异常,用cli模式登陆A实例,发现无论是读还是写,都异常慢。
观察系统资源,很淡定,观察disk io,发现B实例做bgrewriteaof时,disk的使用率100%
分析是硬盘资源阻塞了A实例
通过分析,redis配置的是  appendfsync everysec (默认配置),由于redis每秒做fsync,而fsync是在主进程完成的,此时disk的io使用率是100%,导致了redis的阻塞。
对2.2版本的临时解决方案
appendfsync no
no-appendfsync-on-rewrite yes

终极解决,升级到redis 2.4
在redis 2.4中,对fsync的操作,是由子进程来完成的,系统初始的时候,初始一个队列,主进程将任务压入队列,由子进程监控队列完成相应任务。
详细请参考redis手册
标签: Redis
评论: 0 | 引用: 0 | 阅读: 7464