听《Node服务线上故障》分享的思考
2022-09-08 本文已影响0人
simonbaker
文章不易,请关注公众号 毛毛虫的小小蜡笔,多多支持,谢谢。
有任何问题都可以留言咨询。
思考1
写入量很大,导致redis的rdb持久化异常
一开始排查到问题,是访问Redis返回时长较长。
然后看到应用服务的报错信息:
MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
再查看redis组件的日志:
can't save in background: fork: cannot allocate memory
说明是bgsave出错了,无法申请到内存。
思考
1、bgsave vs save
save直接调用rdbSave函数,阻塞redis主进程,直到保存完成为止。在主进程阻塞期间,服务器不能处理客户端的任何请求。
如果数据量小,用此命令可能感觉不出有什么区别,但是当数据量很大的时候,就需要谨慎使用这个命令。
bgsave命令执行之后立即返回OK ,然后redis fork出一个新子进程,原来的redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。
2、rdb的缺点
详情 请查看:毛毛虫的小小蜡笔