Назад | Перейти на главную страницу

Redis 2.0.3 не отпускал удаленный файл appendonly.aof после BGREWRITEAOF

Ubuntu 10.04.2, Redis 2.0.3 (подробнее в конце вопроса).

Мой файл AOF для Redis становится слишком большим до такой степени, что вскоре он может занять все свободное дисковое пространство на моем VPS-сервере с небольшим жестким диском:

$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/xvda              32G   24G  6.7G  78% /

$ ls -la
total 3866688
drwxr-xr-x  2 redis redis       4096 2011-03-02 00:11 .
drwxr-xr-x 29 root  root        4096 2011-01-24 15:58 ..
-rw-r-----  1 redis redis 3923246988 2011-03-02 00:14 appendonly.aof
-rw-rw----  1 redis redis   32356467 2011-03-02 00:11 dump.rdb

Когда я бегу BGREWRITEAOF, файл AOF сжимается, но дисковое пространство не освобождается:

$ ls -la
total 95440
drwxr-xr-x  2 redis redis     4096 2011-03-02 00:17 .
drwxr-xr-x 29 root  root      4096 2011-01-24 15:58 ..
-rw-rw----  1 redis redis 65137639 2011-03-02 00:17 appendonly.aof
-rw-rw----  1 redis redis 32476167 2011-03-02 00:17 dump.rdb

$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/xvda              32G   24G  6.7G  78% /

Конечно, Redis все еще хранит удаленный файл:

$ sudo lsof -p6916
COMMAND    PID  USER   FD   TYPE   DEVICE   SIZE/OFF   NODE NAME
...
redis-ser 6916 redis    7r   REG    202,0 3923957317 918129 /var/lib/redis/appendonly.aof (deleted)
...
redis-ser 6916 redis   10w   REG    202,0   66952615 917507 /var/lib/redis/appendonly.aof
...

Как я могу обойти эту проблему? На этот раз я могу перезапустить Redis, но мне бы очень хотелось избежать этого на регулярной основе.

Обратите внимание, что я не могу выполнить обновление до 2.2 (хотя обновление до 2.0.4 возможно).

Дополнительная информация о моей системе:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 10.04.2 LTS
Release:    10.04
Codename:   lucid

$ uname -a
Linux my.box 2.6.32.16-linode28 #1 SMP Sun Jul 25 21:32:42 UTC 2010 i686 GNU/Linux

$ redis-cli info
redis_version:2.0.3
redis_git_sha1:00000000
redis_git_dirty:0
arch_bits:32
multiplexing_api:epoll
process_id:6916
uptime_in_seconds:632728
uptime_in_days:7
connected_clients:2
connected_slaves:0
blocked_clients:0
used_memory:65714632
used_memory_human:62.67M
changes_since_last_save:8398
bgsave_in_progress:0
last_save_time:1299014574
bgrewriteaof_in_progress:0
total_connections_received:17
total_commands_processed:55748609
expired_keys:0
hash_max_zipmap_entries:64
hash_max_zipmap_value:512
pubsub_channels:0
pubsub_patterns:0
vm_enabled:0
role:master
db0:keys=1,expires=0
db1:keys=18,expires=0

Оказалось, что это настоящая ошибка Redis, которая будет исправлена ​​в 2.2.2.