
今天突然就用不了redis了 , 也不知道是什么原因 , 甚至问了deepseek 给了个很笼统的回答 , 最后在这个位置找到了解决办法 , 怕以后发生相同的问题又会手忙脚乱 , 因此作此笔记以作备忘(可以快速解决)
问题原因:
问题情况:
redis无法正常工作 , 重启后前3秒内正常工作,但瞬间又不工作 , (即是重启的一瞬间是正常工作的,但好似是卡到某个点就不工作了 , 给人的感觉就好像是读取时备份文件时出错了(读不进内存里)
因为是开启了心跳 ,所以就会出现不断地重启的情况(就是pid不停地跳1020->1025->1035->.....)
用服务器命令查看状态:
#service redis status
Redirecting to /bin/systemctl status redis.service
● redis.service - Redis persistent key-value database
Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/redis.service.d
└─limit.conf
Active: failed (Result: core-dump) since Mon 2025-04-21 10:33:54 CST; 4s ago
Process: 104140 ExecStart=/usr/bin/redis-server /etc/redis.conf --supervised systemd (code=dumped, signal=SEGV)
Main PID: 104140 (code=dumped, signal=SEGV)
4月 21 10:33:51 localhost.localdomain systemd[1]: Starting Redis persistent key-value database...
4月 21 10:33:51 localhost.localdomain systemd[1]: Started Redis persistent key-value database.
4月 21 10:33:54 localhost.localdomain systemd-coredump[104189]: Process 104140 (redis-server) of user 994 dumped core.
4月 21 10:33:54 localhost.localdomain systemd[1]: redis.service: Main process exited, code=dumped, status=11/SEGV
4月 21 10:33:54 localhost.localdomain systemd[1]: redis.service: Failed with result 'core-dump'.
查看日志
位置: /var/log/redis/redis.log
82935:M 21 Apr 2025 10:11:36.524 # Server initialized
82935:M 21 Apr 2025 10:11:36.524 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
82935:M 21 Apr 2025 10:11:36.524 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
//翻译:
82935:M 21 Apr 2025 10:11:36.524 #服务器初始化
82935:M 21 Apr 2025 10:11:36.524 # WARNING overcommit_memory设置为0!在低内存条件下,后台保存可能失败。要解决此问题,请添加“vm”。“Overcommit_memory = 1”到/etc/sysctl.conf中,然后重新启动或运行命令“sysctl vm. conf”。Overcommit_memory =1'才能生效。
82935:M 21 Apr 2025 10:11:36.524 #警告你在内核中启用了透明大页面(THP)支持。这将造成Redis的延迟和内存使用问题。要解决这个问题,以root用户身份运行命令echo never > /sys/kernel/mm/transparent_hugepage/enabled,并将其添加到/etc/rc本地,以便在重新启动后保留设置。关闭THP后,Redis必须重新启动。
//作了这个将 overcommit_memory=1的操作, 但问题没有解决!
//意思是说服务器可能是内存不足!
问题分析
服务器的内存应该是足够大的 , 所以应该不存在内存不足的问题, 那么应该(剩下)就是读取临时备份/(临时)文件的出错的问题!!
应该是临时文件错误了,或者是临时文件损坏了!! 所以读取失败,
解决也非常简单,删除临时文件即可!!
解决过程:
1.先关闭心跳:
/etc/keepalived/check_redis.sh
2.进入目录:/var/lib/redis/ 并删除目录下的所有的 dump.rdb ,xxx.rdb文件!!
通常是只有一个 "dump.rdb" , 这个文件就是备份文件 , 如果无法正常加载启动,通常就是这个文件出错了 , 删除即可!!
3.删除重启
查看 : #service redis status
Redirecting to /bin/systemctl status redis.service
● redis.service - Redis persistent key-value database
Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/redis.service.d
└─limit.conf
Active: active (running) since Mon 2025-04-21 10:38:33 CST; 29min ago
Main PID: 108656 (redis-server)
Tasks: 4 (limit: 203844)
Memory: 4.5M
CGroup: /system.slice/redis.service
└─108656 /usr/bin/redis-server 127.0.0.1:6379
4月 21 10:38:33 localhost.localdomain systemd[1]: Starting Redis persistent key-value database...
4月 21 10:38:33 localhost.localdomain systemd[1]: Started Redis persistent key-value database.
4.重启心跳