Redis:fork: Out of memory

				版权声明:本文为博主原创文章,转载请说明出处。					https://blog.csdn.net/weixin_43549578/article/details/86544141				</div>
							<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css">
							            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css">
					<div class="htmledit_views" id="content_views">
            <p>线上项目报错,根据设置的报错发送邮件发时,通过查看邮件发现线上redis发生了异常:</p>
Can't save in background: fork: Out of memory
  
  

 根据分析发现:

       redis在fork的时候,当这个进程的内存空间以G为单位时,fork就成为一件很恐怖的操作。何况在16G内存的主机上fork 14G内存的进程呢?肯定会报内存无法分配的。更可气的是,越是改动频繁的主机上fork也越频繁,fork操作本身的代价恐怕也不会比假死好多少。

根据原因,我们可以有如下解决方案:

在redis配置中:stop-writes-on-bgsave-error yes

      stop-writes-on-bgsave-error yes:在RDB snapshots持久化过程中出现问题,设置该参数后,Redis是不允许用户进行任何更新操作。

不彻底的解决方案:stop-writes-on-bgsave-error false

  这种方式:当redis写硬盘快照出错时,可以让用户继续做更新操作,但是写硬盘仍然是失败的。

彻底解决方案:

编辑文件 /etc/sysctl.conf 添加:

vm.overcommit_memory=1
  
  

执行sysctl -p使其生效;

Overcommit:Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存,将这些不会使用的空闲内存分配给其它程序使用,以提高内存利用率。

具体可以查看:点击

				版权声明:本文为博主原创文章,转载请说明出处。					https://blog.csdn.net/weixin_43549578/article/details/86544141				</div>
							<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css">
							            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css">
					<div class="htmledit_views" id="content_views">
            <p>线上项目报错,根据设置的报错发送邮件发时,通过查看邮件发现线上redis发生了异常:</p>

猜你喜欢

转载自blog.csdn.net/weixin_40976261/article/details/89097717