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
答案 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-tool或rdb2csv等工具来分析和导出有价值的数据,或者使用内存更多的服务器。