• 幕客老师召集小伙伴
  • 运维高手36项修炼
  • python自动化运维项目实战
  • nginx从入门到实战
  • 阿里云与Centos7实战

Redis持久化AOF和BGsave同时开启引起磁盘阻塞

一、现象

程序反应连接Redis偶尔会有连接超时现象,日志情况如下:

2017-06-07 10:25:07.748 [pool-1-thread-21] ERROR slowlog - {"msg":"xxx1::{\"ObjectId\":\"redishget\",\"field\":\"281\",\"key\":\"ad_d61514a0559afca4_P3\"}","slowtime":4007,"title":"redishgetSlowLog"}

2017-06-07 10:29:07.159 [pool-1-thread-158] ERROR slowlog - {"msg":"xxx2::{\"ObjectId\":\"redishget\",\"field\":\"211\",\"key\":\"ad_d61514a0559afca4_NineToTo\"}","slowtime":4005,"title":"redishgetSlowLog"}

手动进行get指定key操作

-> Redirected to slot [15076] located at 192.1.1.1:6381
(error) WRONGTYPE Operation against a key holding the wrong kind of value
(27.31s)
192.1.1.1:6381> get ad_d61514a0559afca4_NineToTo

二、猜想

因为每次连接超时时候,会发现正好操作系统进行redis的bgsave操作。

三、

Redis 服务设置了 appendfsync everysec, 主进程每秒钟便会调用 fsync(), 要求内核将数据写到存储硬件里. 但由于子进程同时也在写硬盘, 从而导致主进程 fsync()/write() 操作被阻塞, 最终导致 Redis 主进程阻塞了.

解决方法便是设置 no-appendfsync-on-rewrite yes, 在子进程处理和写硬盘时, 主进程不调用 fsync() 操作

 

四、补充

no-appendfsync-on-rewrite   //控制在日志重写时,是否进行命令追加操作

 

 

--------------------------追踪

发现前端还是有超时现象,再操作系统上使用top进行cpu利用率分析,发现部分cpu内核运行跑高 ,而且是bgsave得进程

所以,还是怀疑bgsave在redis机制存在问题,或者bgsave和aof同时开启导致。

不得已关闭bgsave

查看redis相关信息,

Redis持久化AOF和BGsave同时开启引起磁盘阻塞

Pingbacks已打开。

引用地址

暂无评论

发表评论