Redis管道在Linux上崩溃

问题描述 投票:0回答:1

我正在使用带有Python的celery库来并行处理一些相当大的数据集。但我运行的每日cronjob,每隔两三天就会中断,会出现以下错误。

CRITICAL/MainProcess] Unrecoverable error: ResponseError('MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error.',)

redis日志看起来像

7633:M 12 Apr 07:56:28.284 * 1 changes in 900 seconds. Saving...
7633:M 12 Apr 07:56:28.288 * Background saving started by pid 9530
9530:C 12 Apr 07:56:28.372 * DB saved on disk
9530:C 12 Apr 07:56:28.373 * RDB: 2 MB of memory used by copy-on-write
7633:M 12 Apr 07:56:28.388 * Background saving terminated with success
7633:M 12 Apr 08:01:29.065 * 10 changes in 300 seconds. Saving...
7633:M 12 Apr 08:01:29.065 # Can't save in background: fork: Cannot allocate memory
7633:M 12 Apr 08:01:35.083 * 10 changes in 300 seconds. Saving...
7633:M 12 Apr 08:01:35.088 * Background saving started by pid 9998
9998:C 12 Apr 08:01:35.099 * DB saved on disk
9998:C 12 Apr 08:01:35.101 * RDB: 2 MB of memory used by copy-on-write
7633:M 12 Apr 08:01:35.188 * Background saving terminated with success

相关的系统配置是

  • Python 3.6
  • 芹菜4.2.1
  • Redis Server和CLI 4.0.9
  • Ubuntu 18.04(仿生)

有趣的是,完全相同的配置和系统在另一个(开发)服务器上正常运行,另一个运行Ubuntu 16.04。但是制作方法却失败了。请注意,我不是芹菜和redis的大专家,只是通过大量的谷歌搜索和一些教程后得到的代码。因此,请尝试以相对基本的术语保持故障排除步骤。另外,当我ping shell上的redis-cli时,我得到一个pong作为回报,这表明服务器正在运行。

python bash redis celery message-queue
1个回答
0
投票

看起来你的内存运行太低,看你从4月12日开始登录:“无法保存在后台:fork:无法分配内存”。看起来当REDIS试图保存快照时(请参阅here获取更多详细信息)操作失败,直到它无法恢复为止。假设您正在使用大型数据集,可能的解决方案可能是:

  1. 如果可能,请为不再需要的数据添加到期时间。更多细节here
  2. 增加内存大小,但如果不断添加数据,它可能会在某些时候爆炸。
  3. 但是,禁用持久性,编写快照失败可能是内存不足的副产品。请记住,REDIS可能会驱逐某些键,在某些情况下这可能不是理想的情况。
© www.soinside.com 2019 - 2024. All rights reserved.