Как BGREWRITEAOF может вернуть ERR?
Документация дляBGREWRITEAOF
говорится, что BGREWRITEAOF
всегда возвращает строковое значение OK
,
Ну сегодня я отправила BGREWRITEAOF
на мой редис-сервер 2.6.7 и получил (error) ERR
в ответ.
maxmemory
это 3G; appendonly
является yes
, Система имеет 4 ГБ оперативной памяти.
Что случилось?
1 ответ
Фоновому потоку, отвечающему за перезапись AOF, не хватило памяти. Журнал выглядел примерно так, повторяясь каждые несколько сотен мс:
[2435] * Starting automatic rewriting of AOF on 302% growth
[2435] # Can't rewrite append only file in background: fork: Cannot allocate memory
Redis попал в петлю, где застрял фоновый поток, и BGREWRITEAOF
не смог начать новый. Я перезапустил сервер Redis так, как я его исправил, с несколькими секундами простоя.