redis机器物理死机问题分析(OOM)
来源:互联网 发布:usb端口定义 编辑:程序博客网 时间:2024/06/17 22:27
问题的表现
在测试主搜索增量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值换出去。
- redis机器物理死机问题分析(OOM)
- 死机问题分析
- Android死机问题分析
- java OOM(OutOfMemory) 问题分析
- 关于OOM问题分析
- android 常见死机问题--log分析
- android 常见死机问题--log分析
- android 常见死机问题--log分析
- android 常见死机问题--log分析
- 线上服务经常性死机问题分析总结
- android 常见死机问题--log分析
- android 常见死机问题--log分析
- android 常见死机问题--log分析
- android 常见死机问题-如何分析
- android 常见死机问题--log分析
- android 常见死机问题--log分析
- android 常见死机问题-如何分析
- android 常见死机问题--log分析
- 安装redis和phpredis模块
- 103. Binary Tree Zigzag Level Order Traversal
- java位移运算导致数值为负数
- 编译OpenCV 3.2
- Linux下增加swap虚拟内存(转)
- redis机器物理死机问题分析(OOM)
- HBase浅谈
- sysbench性能测试工具
- SpringMVC 入门------ 第一个SpringMVC框架的JavaWeb项目
- Linux下设置MySQL主从复制备份服务。
- MySQL 数据库性能实时监控
- 判断是否是快乐数
- JQuery Highcharts图表控件
- Java泛型Type体系