注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

技术行者

时代的车轮在按照摩尔定律滚动。

 
 
 

日志

 
 

redis机器物理死机问题分析(OOM)  

2011-12-16 13:23:00|  分类: Linux |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

问题的表现

在测试主搜索增量bolt的loader程序的时候,它有一步是将数据加载到redis里。在平时做测试的时候,几次发生做loader导致了redis所在的测试机器死机(物理死机)。


问题分析

造成了物理死机,我们初步认为是由于测试机器内存不足,而数据量过大,导致内存爆满,最后死机的。

觉得需要寻找一种解决机器挂掉的方法,后来发现

/home/admin/redis/bin/redis-cli info(命令可以查看redis使用了多少内存)

同时,我们也注意到了redis的一个配置项目maxmemory(通过查阅资料,得知是可以限制redis对物理内存的使用的),通过监控maxmemory这个配置。后来确定了,这

 

个限制是有效的。

关键代码:

if (server.maxmemory) freeMemoryIfNeeded();

if (server.maxmemory && (c->cmd->flags & REDIS_CMD_DENYOOM) &&

zmalloc_used_memory() > server.maxmemory)

{

addReplyError(c,"command not allowed when used memory > 'maxmemory'");

return REDIS_OK;

}

一般情况下,我们跑一次loader(将数据载入到redis里),大概redis需要占用7G左右的内存(测试机器内存一共才8G)。

/home/admin/redis/bin/redis-cli info |grep memory

used_memory:2998410616

used_memory_human:2.79G

used_memory_rss:3609223168

我们开启了两个进程,也就是对上面的数据的2倍,就是我们需要的内存数目。


问题原因

而之前死机的原因,也很简单,本身redis就占用了7G左右的内存,同时,我们机器还是一个Hadoop的一个slave,偶尔会产生1G多的内存占用。而我们机器的物理内存

 

一共就是8G,两个一旦同时相加,则内存耗尽(OOM),机器死机。

防止redis机器死机的方法:

现在新增一个maxmemory的配置,将它设置为总和小于6.5G的占用。当数据使用一旦达到maxmemory,则程序会直接停止写入内存。

Redis还有一个功能,可以为key值设置过期时间,一旦内存满了,则先将过期的key值换出去。

  评论这张
 
阅读(411)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017