redis崩溃真让人头疼!!!

欣量软件 发布于 2015/05/27 20:55
阅读 10K+
收藏 2

    公司需要用redis作数据缓存,我们就在内网做了一个测试。测试的过程为,开启redis服务器,然后开启一个写入数据的程序,不停地往redis内存中写入数据,奇怪的是,在测试的过程中,redis服务器经常停止运行(即崩溃)。

    检查了自己的程序,没有抛出什么异常,再上网找了一些资料,收效甚微。发现,似乎很少有人知道redis崩溃的问题,有知道的,按照他们提出的方案,问题依旧得不到解决,甚至后来通过配置参数,查看DEBUG日志,也没能看到任何异常。就是这么诡异的崩溃了。

    小弟不才特来论坛寻找答案,如果有大神遇到过此类问题,或是知道解决方案的,或是给一些建议也行,吾将感激不尽。

加载中
0
Feng_Yu
Feng_Yu
查redis的日志了没
欣量软件
查看了Log日志,级别是DEBUG,算是最高级了吧,但是崩溃时日志没有任何异常提示
0
吾同树
吾同树
我们公司最近也遇到这种问题,找不到原因
欣量软件
还真是同病相怜啊
0
Tuesday
Tuesday
开源产品就是没测试就发布..
大漠穷秋天
大漠穷秋天
不懂就别瞎bb
欣量软件
回复 @霸气千秋 : 恩,我们公司都是很谨慎的
huohuo1589
huohuo1589
不懂别瞎逼逼
霸气千秋
霸气千秋
一个成功的开源程序都配有详细的测试用例代码, 怎么可能出现没有测试就发布的情况。你当 make test 是吃干饭的么。
0
聚源空间
聚源空间
用的什么版本?换个版本试试呢?
欣量软件
Redis 2.8.4
0
atrun
atrun

这个问题,要透过问题看本质,不是redis不好,是理解不深刻,下面重点说一下:

redis内存管理方式,支持tcmalloc,jemalloc,malloc三种内存分配,memcache使用slabs,malloc等内存分配方式。

简单点,就是redis,是边用边申请,使用现场申请内存的方式来存储数据,并且很少使用free-list等方式来优化内存分配;
memcache使用预分配的内存池的方式,使用slab和大小不同的chunk来管理内存,Item根据大小选择合适的chunk存储,内存池的方式可以省去申请/释放内存的开销

优化的参数:
1.设置下redis.conf中的maxmemory选项,我的经验是当你的redis物理内存使用超过内存总容量的3/5时就会开始比较危险了。

2.需要将vm.overcommit设置为1,这参数在大量写入时,很有用

overcommit_memory=0,默认,智能超发,每次要求分配内存时,kernel都会比较请求的空间和空余的空间是否足以分配
overcommit_memory=1,请求分配内存时,永远假装还有足够的内存
overcommit_memory=2,不允许超发内存,即允许分配的大小小于

3.确保设置了一定量的swap,最好和内存一样大,否则内核的OOM(out-of-memory)killer会干掉Redis进程


参考:Linux下Redis内存优化http://ju.outofmemory.cn/entry/105163

大漠穷秋天
大漠穷秋天
第三点说得很对,linux的oom-killer机制干掉了redis的进程
0
霸气千秋
霸气千秋
看描述, 楼主像是在windows下使用redis的
欣量软件
you are right.
0
eechen
eechen
Windows版Redis不是官方推出的,不被Redis官方支持,是第三方修改的,好像是微软修改的。Redis单进程的结构在严重依赖多线程的Windows上性能可想而知,另外Redis的aeEvent在Linux上使用epoll实现。
欣量软件
问题是就是要用到缓存,而且是多线程的,尽管知道是微软修改的,但是用起来还是很方便。现在的问题是是继续用redis,去解决崩溃问题,还是自己写一个缓存方案,你们觉得呢
0
Raynor1
Raynor1
感觉也像是在windows下面。。。
欣量软件
准确的说是Windows Server 2012 R2 64位操作系统,内存8G
0
kiwivip
kiwivip
centos上面从来没崩过....
欣量软件
回复 @Raynor1 : 说说你们的问题呗,怎么改又让它不崩的呢,求教
Raynor1
Raynor1
哈哈。好吧。。我们自己改过的redis还是有崩过那么几次的。。不过后面都改了后。就不崩 了。。
0
rocky_star
rocky_star

用的centos redis作为业务主数据库服务器。当然业务是比较简单的。运行了一年了没有发生过任何问题。

还是挺平稳的。

欣量软件
可惜我们是Windows下的,还是有很多地方不一样的,包括配置参数等等
返回顶部
顶部