gpt4 book ai didi

redis - 什么会导致 Redis RDB 快照停止?

转载 作者:IT王子 更新时间:2023-10-29 06:05:23 25 4
gpt4 key购买 nike

我在 Ubuntu 14.04 上安装了一个 redis,我似乎几乎每周都会遇到 RDB 快照完成问题。 Redis版本为3.0.4 64位。

3838:M 24 Feb 09:46:28.826 * Background saving terminated with success
3838:M 24 Feb 09:47:29.088 * 100000 changes in 60 seconds. Saving...
3838:M 24 Feb 09:47:29.230 * Background saving started by pid 17281
17281:signal-handler (1456338079) Received SIGTERM scheduling shutdown...
3838:M 24 Feb 13:24:19.358 # Background saving terminated by signal 9
3838:M 24 Feb 13:24:19.622 * 10 changes in 900 seconds. Saving...
3838:M 24 Feb 13:24:19.730 * Background saving started by pid 17477

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

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

2016-02-24 13:11:12,046 [2344] ERROR kCollectors.Main - Error while adding to Redis: No connection is available to service this operation: SADD ALLCH

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

目前,我正处于没有 Redis 后台保存成功的地步,并且后台进程变得比我的 VM 开始交换的常规进程大得多。这是我的 TOP。 3838是我的redis实例,17477是后台保存进程(如上所述):

top - 14:06:42 up 118 days, 2:05, 1 user, load average: 1.07, 1.07, 1.13
Tasks: 81 total, 3 running, 78 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.8 us, 1.5 sy, 0.0 ni, 45.8 id, 51.3 wa, 0.0 hi, 0.5 si, 0.0 st
KiB Mem: 8176996 total, 8036792 used, 140204 free, 120 buffers
KiB Swap: 6289404 total, 3968236 used, 2321168 free. 4044 cached Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
36 root 20 0 0 0 0 S 2.3 0.0 288:05.05 kswapd0
3838 rrr 20 0 7791836 3.734g 612 S 2.0 47.9 330:08.65 redis-server
17477 rrr 20 0 7792228 6.606g 364 D 1.0 84.7 0:43.49 redis-server

最佳答案

这很有趣,因为我不记得曾经阅读过此类问题,因此发现根本原因可能非常有用。

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

几个问题:

  1. 即使您重新启动该过程,也会发生这种情况吗? (但是,如果您可以避免重新启动并且您还没有重述,请不要这样做,否则我们可能不再了解根本原因)。
  2. 当 RDB 保存处于事件状态时,您是否看到 CPU 使用率很高并且进程正在使用 ps/top 运行?
  3. 你能不能用gdb -p <pid>来中断这个过程?并获取进程的堆栈跟踪?
  4. 你能提供Redis吗INFO输出以检查版本和其他配置内容和状态?
  5. 你能查一下free吗发生这种情况时输出?

TLDR:系统是否可能内存不足并且正在大量交换?所以子进程在保存 RDB 文件时访问了所有页面并强制所有内容都在驻留集中。系统无法处理如此多的 I/O,因此需要很长时间才能完成 RDB 保存。

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

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

所以系统内存不足并且正在疯狂交换,这导致了上述行为。当 RDB 保存开始时,COW 将使用大量额外的内存将服务器推向内存限制。

谢谢。

关于redis - 什么会导致 Redis RDB 快照停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35610964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com