Redis RDB持久化失败报错解决方案

问题描述

之前搭建的项目中使用到redis缓存生成的验证码,但是今天进入网站后,验证码没了。报了一个错
Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error.

查日志

异常让去查redis生成的error日志,那就去看下。
使用tail -n 30 sys-error.log查看最后30行的日志信息。
在这里插入图片描述
RDB持久化到磁盘失败,那先去看看是不是磁盘空间不够了。
这里又学到了一个命令。df -h以用户的角度查看磁盘大概信息
在这里插入图片描述

解决

可用的空间还是有的,占用率也不大,那会不会是内存的原因。这里可以修改内核参数。
vim /etc/sysctl.conf,将vm.overcommit_memory = 1,默认这个参数值是0,表示首先会检查一下申请的内存是否大于当前系统总内存大小,如果大于就会报错,申请失败(RDB bgsave会fork子进程持久化日志,fork的子进程所申请的资源和父进程一样,因此有可能申请失败,导致持久化失败);overcommit_memory = 1表示 允许overcommit,对内存申请来者不拒。当overcommit_memory=2时表示直接拒绝内存申请请求。

当改为1的时候重启redis,然后验证码就刷新出来了。

这里总结一下处理问题过程中学到的一些常用命令。

  • 查看内存占用 free -m
  • 查看CPU占用率前10的进程以及他们所占用的内存,磁盘情况ps auxw|sort -rn -k3|head -10,这里sort -r表示从大到小排序,-n表示按照数字大小排序,head-10表示取前10条记录。
  • vmstat命令也能查看内存,CPU,IO的使用情况:vmstat 2 3每隔2秒刷新一次,总共展示3条记录。
    在这里插入图片描述

最近秋招已经开了好长时间了,只能一边实习一边备战秋招了,博客这些段日子也没更新,北漂确实挺难的,后续会分享这段实习的收获以及北漂的感想,加油!暗暗给自己打气。

Guess you like

Origin blog.csdn.net/qq_43672652/article/details/119982469