我正在使用带有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.',)
红色日志如下所示
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
相关的系统配置是
- 蟒蛇 3.6
- 芹菜 4.2.1
- Redis 服务器和 CLI 4.0.9
- Ubuntu 18.04 (仿生(
有趣的是,完全相同的配置和系统在另一台(开发(服务器上运行良好,还有另一台运行 Ubuntu 16.04 的服务器。但是生产失败了。请注意,我不是芹菜和 redis 的大专家,只是在大量谷歌搜索和遵循一些教程后让代码工作。因此,请尽量保持相对基本的故障排除步骤。此外,当我在 shell 上 ping redis-cli 时,我得到一个 pong 作为回报,这表明服务器正在运行。
您的内存似乎太少,请参阅您从 4 月 12 日开始的日志:"无法在后台保存:分叉:无法分配内存"。似乎当 REDIS 尝试保存快照时(有关更多详细信息,请参阅此处(,操作会失败,直到无法恢复为止。假设您使用的是大型数据集,可能的解决方案可能是:
- 如果可能,请为不再需要的数据添加过期时间。更多细节在这里。
- 增加内存大小,但如果您不断添加数据,它可能会在某个时候爆炸。
- 禁用持久性,但是,写入快照失败可能是内存不足的副产品。请记住,REDIS 可能会逐出某些密钥,这在某些情况下可能不是理想的情况。