2022-01-21 13:50:24 木庄网络博客 编辑:奇奇 浏览数:42还学网
本文摘自PHP中文网,作者青灯夜游,侵删。【相关推荐:Redis视频教程】一、RDB持久化模式缺陷1、问题描述:并发200路,模拟不断写Redis,持续4小时后,接口调用开始出现大量失败,错误信息如下:1{"data":...“”
本文摘自PHP中文网,作者青灯夜游,侵删。
【相关推荐:Redis视频教程】
一、RDB持久化模式缺陷
1、问题描述:
并发200路,模拟不断写Redis,持续4小时后,接口调用开始出现大量失败,错误信息如下:
1
{
"data"
:{
"sendResult"
:
null
},
"base"
:{
"returncode"
:
"99999"
,
"returndesc"
:
"系统异常: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."
},
"qrybase"
:{
"total"
:0,
"count"
:0,
"start"
:0}}
2、原因分析:
解读错误信息,以为是磁盘不够用引起,结果发现磁盘还剩余42%,如下所示:
于是根据错误信息提示开启Redis日志,继续压测,接口依然报错,但可从Redis日志信息中
Can’t save in background: fork: Cannot allocate memory
进程使用内存不当有关,查看Redis主进程占用内存如下:占用近55%*4G内存
具体原因:Redis在保存数据到硬盘时为了避免主进程假死,需要Fork一份主进程,然后在Fork进程内完成数据保存到硬盘的操作,如果主进程使用了2.2GB的内存,Fork子进程的时候需要额外的2.2GB,此时内存就不够了,Fork失败,进而数据保存硬盘也失败了。
3、缓解方案(不能根本解决问题):
3.1 修改redis.conf文件中配置项stop-writes-on-bgsave-error no (默认值为yes),即当bgsave快照操作出错时停止写数据到磁盘,这样后面写错做均会失败,为了不影响后续写操作,故需将该项值改为no
3.2 修改内核参数(如下3种方式),但需要root权限:
1
2
3
(1) 编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p 使配置文件生效
(2)sysctl vm.overcommit_memory=1
(3)echo 1 > /proc/sys/vm/overcommit_memory
二、AOF持久化模式缺陷
版权与免责声明:
凡未注明"稿件来源"的内容均为转载稿,本网转载出于传递更多信息的目的;如转载稿涉及版权问题,请作者联系我们,同时对于用户评论等信息,本网并不意味着赞同其观点或证实其内容的真实性;
本文地址://www.casaischia.com/news/2022/01/21/568280815.html
转载本站原创文章请注明来源:还学网
“”
IT之家 1 月 17 日消息,近期,华硕官网发布了 Windows 10 笔记本电脑升级 Windows 11 错误的...[详细]
“”
IT之家 1 月 4 日消息,今天,realme Book 增强版笔记本发布,搭载了英特尔 i5-11320H 处理器,...[详细]
“”
IT之家 1 月 19 日消息,微软昨日晚间发布了一项重磅公告,以每股 95 美元的现金收购游戏开发和互动娱乐内容发行商...[详细]
“”
近日,有媒体报道称,本月有赞启动了第一轮裁员。据多位接受裁员的消息人士证实,有赞确实把“人员优化”写入了2022年的OK...[详细]
“”
IT之家 1 月 16 日消息,宁德时代宣布将于 1 月 18 日 15:30 举办发布会,推出换电品牌 EVOGO。中...[详细]