600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Redis 无法持久化到硬盘错误:not able to persist on disk

Redis 无法持久化到硬盘错误:not able to persist on disk

时间:2020-08-23 06:06:14

相关推荐

Redis 无法持久化到硬盘错误:not able to persist on disk

Redis 无法持久化到硬盘错误:not able to persist on disk

一、报错:二、搜索网上的解决方案,大概有三种:1. 直接忽略形2. 解决问题形3. 内存型问题处理:三、我的情况:3.1 开发反馈redis异常、日志有报错3.2 查看系统情况:3.3 查日志3.4查监控3.5 查看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被配置为保存数据库快照,但它目前不能持久化到硬盘。用来修改集合数据的命令不能用。请查看Redis日志的详细错误信息。

二、搜索网上的解决方案,大概有三种:

1. 直接忽略形

将stop-writes-on-bgsave-error设置为no

# 临时生效127.0.0.1:6379> config set stop-writes-on-bgsave-error no# 永久生效 修改配置文件,重启服务vim /etc/redis.confxxx

简单粗暴,但不推荐

2. 解决问题形

查日志 不能保存到硬盘?为什么?

权限不足? chown授权

#tail /var/log/redis/redis.log12402:C 26 Nov 18:06:13.077 # Failed opening the RDB file root (in server root dir /var/spool/cron) for saving: Permission denied30640:M 26 Nov 18:06:13.177 # Background saving error# chown redis:redis /var/lib/redis/ -R

磁盘满了? df -h
内存不足了? free -m

原因: 强制关闭Redis快照导致不能持久化

这种方式是比较正常的套路,通过查日志来确定内存、磁盘问题、权限问题。

3. 内存型问题处理:

修改系统内核相关内存分配策略:sysctl vm.overcommit_memory=1

这个参数是vm.overcommit_memory 是linux系统在应用申请内存使用的一个策略。

该策略有三个值:0、1、2 。0为默认值

在日志中看到有相关的日志:Can’t save in background: fork: Cannot allocate memory不能保存,fork进程没有足够内存。但查看系统内存还有两三个G,这个时候就懵逼了。原来默认情况下系统对于内存的分配特别是dump内存中数据到磁盘上市会都需要fork一份,然后保存在磁盘上。而我们的redis内存应使用了8个G,持久化时候会额外增加一部分,而系统中的内存只有3G,不够。可以修改overcommit_memory的值来改善这个问题。

(特殊情况下可以使用)

三、我的情况:

3.1 开发反馈redis异常、日志有报错

redis.exceptions.ResponseError: 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.During handling of the above exception, another exception occurred:

3.2 查看系统情况:

[root@hn-xx-xx celery]# free -mtotal used freeshared buff/cache availableMem: 3790 1826 1363 0 600 1728Swap: 0 0 0[root@hn-xx-xx celery]# ps -ef |grep redisroot6496 3536 0 21:59 pts/0 00:00:00 grep --color=auto redisredis99781 0 ? 03:27:01 /usr/bin/redis-server 172.16.1.19:6379[root@hn-xx-xx celery]# ll -d /var/lib/redis/drwxr-x--- 2 redis redis 4096 Jul 18 21:46 /var/lib/redis/[root@hn-xx-xx celery]# df -HFilesystem Size Used Avail Use% Mounted on/dev/vda1 43G 11G 30G 26% /devtmpfs 2.0G0 2.0G 0% /devtmpfs 2.0G0 2.0G 0% /dev/shmtmpfs 2.0G 537k 2.0G 1% /runtmpfs 2.0G0 2.0G 0% /sys/fs/cgroup/dev/mapper/vdb--vg-vdb--lv 106G 79M 106G 1% /datatmpfs 398M0 398M 0% /run/user/0tmpfs 398M0 398M 0% /run/user/1004tmpfs 398M0 398M 0% /run/user/1002

磁盘 内存 dump目录权限都正常啊,如何排查问题?–看日志

3.3 查日志

9978:M 17 Jul 17:48:52.379 * 10 changes in 300 seconds. Saving...9978:M 17 Jul 17:48:54.082 # Can't save in background: fork: Cannot allocate memory9978:M 17 Jul 17:48:58.585 * 10 changes in 300 seconds. Saving...9978:M 17 Jul 17:48:58.783 # Can't save in background: fork: Cannot allocate memory9978:M 17 Jul 17:49:04.284 * 10 changes in 300 seconds. Saving...9978:M 17 Jul 17:49:05.487 # Can't save in background: fork: Cannot allocate memory9978:M 17 Jul 17:49:10.083 * 10 changes in 300 seconds. Saving...9978:M 17 Jul 17:49:10.181 # Can't save in background: fork: Cannot allocate memory看通过日志可以看到提示内存不足?

查看时间,原来是昨天的日志。

3.4查监控

原来在17号由于业务原因有短暂的内存不足。

3.5 查看redis的使用情况

[root@hn-xx-xx celery]# redis-cli -h 127.0.0.1127.0.0.1:6379> info Memory# Memoryused_memory:1129160used_memory_human:1.08Mused_memory_rss:5255168used_memory_rss_human:5.01Mused_memory_peak:765978920used_memory_peak_human:730.49Mtotal_system_memory:3974848512total_system_memory_human:3.70Gused_memory_lua:37888used_memory_lua_human:37.00Kmaxmemory:0maxmemory_human:0Bmaxmemory_policy:noevictionmem_fragmentation_ratio:4.65mem_allocator:jemalloc-3.6.0

有问题分析问题,不忽略问题,找到问题的本质,对于发现的问题需要添加精准的监控

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。