Redis日志发现,有大量的"Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting..."信息
8.服务频繁报Redis read timed out问题,查看Redis日志发现,有大量的"Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting..."信息,
经排查发现,由于持久化时,开启子进程将缓冲区中的数据写入到磁盘中,此时大量数据需要持久化,且时间耗时超过2秒时,会打印该日志,从而影响整个Redis的性能,具体分析为:
当打开 AOF 持久化功能后, Redis 处理完每个事件后会调用 write(2) 将变化写入 kernel 的 buffer,如果此时 write(2) 被阻塞,Redis 就不能处理下一个事件。Linux 规定执行 write(2) 时,如果对同一个文件正在执行fdatasync(2)将 kernel buffer写入物理磁盘,或者有system wide sync在执行,write(2)会被Block住,整个Redis被Block住,
因此,在不关闭AOF持久化的情况下,解决方案是设置缓冲区大小:
1).修改系统内核参数
vim /etc/sysctl.conf, 末尾加上(设置为32m):vm.dirty_bytes=33554432
2).最后执行 "sysctl -p" 使配置生
经排查发现,由于持久化时,开启子进程将缓冲区中的数据写入到磁盘中,此时大量数据需要持久化,且时间耗时超过2秒时,会打印该日志,从而影响整个Redis的性能,具体分析为:
当打开 AOF 持久化功能后, Redis 处理完每个事件后会调用 write(2) 将变化写入 kernel 的 buffer,如果此时 write(2) 被阻塞,Redis 就不能处理下一个事件。Linux 规定执行 write(2) 时,如果对同一个文件正在执行fdatasync(2)将 kernel buffer写入物理磁盘,或者有system wide sync在执行,write(2)会被Block住,整个Redis被Block住,
因此,在不关闭AOF持久化的情况下,解决方案是设置缓冲区大小:
1).修改系统内核参数
vim /etc/sysctl.conf, 末尾加上(设置为32m):vm.dirty_bytes=33554432
2).最后执行 "sysctl -p" 使配置生

浙公网安备 33010602011771号