Redis持久化过程一直是影响redis性能的常见因素,如何监控持久化以及如何优化持久化过程呢?下面我们就一起来看看吧。
fork的监控及优化
不管是使用哪种持久化,RDB持久化或AOF重写,主进程都会fork出一个子进程,在子进程里完成rdb文件的生成或aof的重写。fork操作对于操作系统来说属于比较重的操作。fork阶段,redis会阻塞一段时间。阻塞时间和redis数据占用的内存大小成正比关系,每1G内存fork耗时在20毫秒。
如想知道fork阶段的阻塞时间,可以使用info stats命令,查看latest_fork_usec选项的值,单位是微秒。记住是微秒,不是毫秒。
# redis-cli info stats | grep latest
latest_fork_usec:323
优化fork的方法:
- 控制redis占用的内存大小。若占用内存过大的话,可以将应用拆分开,在多个服务器上部署,分摊redis的内存占用。
- 适当降低fork的操作频率。
内存的监控
RDB持久化的日志如下:
……
21692:C 15 May 2020 14:17:06.935 * DB saved on disk
21692:C 15 May 2020 14:17:06.936 * RDB: 2 MB of memory used by copy-on-write
……
可以看到RDB持久化过程消耗了2M内存。
AOF持久化日志如下:
……
15786:C 23 May 2020 07:39:59.145 * AOF rewrite: 2M