Redis进程被OS杀死了,有没有bug?

时间:2013-11-26 02:59:43

标签: ubuntu redis

Redis进程突然消失了。

我试图重新启动它,但又被杀了(见下文):

/usr/local/bin/redis-server /etc/redis.conf
Killed

以下是日志内容,没有任何例外。

> [19724] 26 Nov 10:45:29.457 # Server started, Redis version 2.6.16
> [19724] 26 Nov 10:46:13.172 * DB loaded from disk: 43.715 seconds
> [19724] 26 Nov 10:46:13.182 * The server is now ready to accept
> connections on port 6379

dump.rdb文件是1.5GB,并且有大约5GB的可用内存(我认为这已足够)。

当Redis加载数据库时,我发现自由RAM从5GB减少到0。它被杀后,免费RAM再次变为5GB。

为什么1.5GB dump.rdb需要5GB RAM,这是一个bug吗? 如何解决这个问题呢?我不想删除当前的dump.rdp,有一些重要的数据。

操作系统版本:Ubuntu 12.04.1 LTS 64位

Redis版本:2.6.16

1 个答案:

答案 0 :(得分:4)

使用RAM时,dump.rdb的大小不是1:1。请参阅Why a 500MB Redis dump.rdb file takes about 5.0GB memory?

Redis似乎被OOM杀死了。

  

linux'oom killer'的工作就是牺牲一个或多个   进程以便在其他所有情况下为系统释放内存   失败。它也会杀死任何共享相同mm_struct的进程   选择的过程,原因很明显。

如果您的Redis数据集大于可用RAM,在您的情况下,OOM将尝试释放内存并将其终止。您可以在Redis上禁用OOM:

  

任何特定的过程领导者都可以针对oom杀手进行免疫接种   如果其/ proc // oomadj的值设置为常量   OOM_DISABLE(目前定义为-17)。

...请参阅How to Configure the Linux Out-of-Memory Killer,但如果没有足够的可用内存,您的服务器将开始交换。

因此,您可能希望使用redis-rdb-toolrdb2csv等工具来分析和导出有价值的数据,或者使用内存更多的服务器。

相关问题