Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么会导致Redis RDB快照暂停?_Redis - Fatal编程技术网

什么会导致Redis RDB快照暂停?

什么会导致Redis RDB快照暂停?,redis,Redis,我在Ubuntu14.04上安装了redis,而且我似乎每周都会遇到RDB快照的问题。Redis版本为3.0.4 64位 3838:M 24 Feb 09:46:28.826*后台保存成功终止 3838:M 24 Feb 09:47:29.088*100000在60秒内更改。保存 3838:M 24 Feb 09:47:29.230*后台保存由pid 17281启动17281:信号处理程序(1456338079)收到SIGTERM调度关闭 3838:M 24 Feb 13:24:19.358#后

我在Ubuntu14.04上安装了redis,而且我似乎每周都会遇到RDB快照的问题。Redis版本为3.0.4 64位

3838:M 24 Feb 09:46:28.826*后台保存成功终止
3838:M 24 Feb 09:47:29.088*100000在60秒内更改。保存
3838:M 24 Feb 09:47:29.230*后台保存由pid 17281启动
17281:信号处理程序(1456338079)收到SIGTERM调度关闭
3838:M 24 Feb 13:24:19.358#后台保存被信号9终止
3838:M 24 Feb 13:24:19.622*10在900秒内发生变化。保存
3838:M 24 Feb 13:24:19.730*后台保存由pid 17477启动

您看到的是,在上午9:47后台保存开始,但当我在下午1:24找到它时,它似乎完全停止。我发现分叉进程基本上没有活动——它消耗的内存量没有增加。我试图“杀死”孩子的过程,但它从来没有真正退出,所以我不得不以极端的偏见(-9)杀死它

当情况变得糟糕时,我的应用程序中会出现以下错误:

2016-02-24 13:11:12046[2344]错误KCollector.Main-添加到Redis时出错:没有可用的连接来服务此操作:SADD ALLCH

我的redis配置只做rdb快照(没有AOF)。负载很重,每秒有数千次写入

目前我的redis后台保存没有成功,后台进程比常规进程大得多,我的虚拟机开始交换。这是我的上衣。3838是我的redis实例,17477是后台保存过程(如上所述):

top-14:06:42最多118天,2:05,1个用户,平均负载:1.07,1.07,1.13
任务:共81项,3项运行,78项睡眠,0项停止,0项僵尸
%中央处理器:0.8us,1.5sy,0.0ni,45.8id,51.3wa,0.0hi, 0.5 si,0.0 st
KiB内存:总计8176996个,使用8036792个,可用140204个,120个缓冲区
KiB交换:总计6289404,使用3968236,免费2321168。4044缓存内存

PID用户PR NI VIRT RES SHR S%CPU%MEM TIME+命令
36根20 0 0 0 S 2.3 0.0 288:05.05 kswapd0
3838 rrr 20 0 7791836 3.734g 612 S 2.0 47.9330:08.65 redis服务器
17477 rrr 20 0 7792228 6.606g 364 D 1.0 84.7 0:43.49 redis服务器


这是非常有趣的,因为我不记得曾经读过这样的问题,所以发现根本原因可能非常有用

因此,这里报告的是一个子进程,它保持长时间的活动状态,甚至继续分配内存。如果不是进程内存中的数据损坏,导致RDB进程发现意外情况并以某种方式永远循环,我对此没有任何解释

有几个问题:

  • 即使重新启动流程,也会发生这种情况吗?(但是,如果您可以避免重新启动并且尚未重申,请不要这样做,否则我们可能无法理解根本原因)
  • 当RDB保存处于活动状态时,您是否看到CPU使用率很高,并且进程使用ps/top运行
  • 您是否可以尝试使用
    gdb-p
    中断进程并获取进程的堆栈跟踪
  • 您能否提供Redis
    INFO
    输出,以检查版本和其他配置事项及状态
  • 发生这种情况时,您是否可以检查
    免费
    输出
  • TLDR:是否可能系统内存不足,并且正在大量交换?因此,子进程在保存RDB文件时访问了所有页面,并强制所有内容都位于常驻集中。系统无法处理如此多的I/O,因此需要很长时间才能完成RDB保存

    编辑:我刚刚注意到您报告了内存信息:

    KiB内存:总共8176996个,使用8036792个,可用140204个,120个缓冲区

    因此,系统内存不足,正在疯狂地交换,这导致了上述行为。随着RDB保存的开始,COW将使用大量额外的内存,从而将服务器推向内存限制


    谢谢。

    内存统计数据来自rdb子项运行一段时间后。它并不是从交换状态开始的——事实上,它离交换状态还很远。在编写rdb大约10-15分钟后,它就进入了这种状态。关于是否在重新启动流程后发生,您的意思是重新启动子进程还是重新启动父进程?我以前重新启动过这个孩子,但它最终还是处于相同的状态。我最终不得不把我的整个redis都拆了,让它重新启动。Cpu从来都不高-从来没有真正超过10%。明天我将尝试获取redis信息(尽管我给出了版本)顺便说一句。。。我知道你是redis神:-)非常感谢你的回答。当它再次发生时,我一定会尽可能多地捕捉。如果我进行捕获交换,那么答案是否只是增加内存?我觉得这是个愚蠢的问题,但我觉得有必要问。。。我的IT人员讨厌这个东西已经有这么大的内存了。我知道我可以启动一个集群,但我必须至少多站2个节点才能减少每个节点的大小,因此我们服务器场中的总内存占用量显著增加…@longofest 8G对于服务器来说现在真的不是很多RAM。我的笔记本电脑的运行速度是原来的两倍。@不是高尔夫球手哦,我同意。但很难让IT部门相信这一点。再次捕捉到它,事实上,我的服务器正在交换。谢谢你的反馈。