2013-08-25 3 views
18

Ich bekomme "OOM Befehl nicht erlaubt" beim Versuch, einen Schlüssel zu setzen, maxmemory ist auf 500M eingestellt mit maxmemory-policy "volatile-lru", ich setze TTL für jeden Schlüssel an Redis gesendet.Wie Debuggen des Fehlers "OOM-Befehl nicht zulässig, wenn Arbeitsspeicher> 'Maxmemory'" in Redis verwendet?

INFO Befehl gibt: used_memory_human:809.22M

  1. Wenn MaxMemory auf 500M eingestellt ist, wie kam ich erreicht 809M?
  2. INFO Befehl zeigt keine Keyspaces, wie ist es möglich?
  3. KEYS * gibt "(leere Liste oder Satz)" zurück, ich habe versucht, DB-Nummer zu ändern, noch keine Schlüssel gefunden.

Hier Info Befehlsausgabe:

redis-cli -p 6380 
redis 127.0.0.1:6380> info 
# Server 
redis_version:2.6.4 
redis_git_sha1:00000000 
redis_git_dirty:0 
redis_mode:standalone 
os:Linux 2.6.32-358.14.1.el6.x86_64 x86_64 
arch_bits:64 
multiplexing_api:epoll 
gcc_version:4.4.7 
process_id:28291 
run_id:229a2ee688bdbf677eaed24620102e7060725350 
tcp_port:6380 
uptime_in_seconds:1492488 
uptime_in_days:17 
lru_clock:1429357 

# Clients 
connected_clients:1 
client_longest_output_list:0 
client_biggest_input_buf:0 
blocked_clients:0 

# Memory 
used_memory:848529904 
used_memory_human:809.22M 
used_memory_rss:863551488 
used_memory_peak:848529192 
used_memory_peak_human:809.22M 
used_memory_lua:31744 
mem_fragmentation_ratio:1.02 
mem_allocator:jemalloc-3.0.0 

# Persistence 
loading:0 
rdb_changes_since_last_save:0 
rdb_bgsave_in_progress:0 
rdb_last_save_time:1375949883 
rdb_last_bgsave_status:ok 
rdb_last_bgsave_time_sec:-1 
rdb_current_bgsave_time_sec:-1 
aof_enabled:0 
aof_rewrite_in_progress:0 
aof_rewrite_scheduled:0 
aof_last_rewrite_time_sec:-1 
aof_current_rewrite_time_sec:-1 
aof_last_bgrewrite_status:ok 

# Stats 
total_connections_received:3 
total_commands_processed:8 
instantaneous_ops_per_sec:0 
rejected_connections:0 
expired_keys:0 
evicted_keys:0 
keyspace_hits:0 
keyspace_misses:0 
pubsub_channels:0 
pubsub_patterns:0 
latest_fork_usec:0 

# Replication 
role:master 
connected_slaves:0 

# CPU 
used_cpu_sys:18577.25 
used_cpu_user:1376055.38 
used_cpu_sys_children:0.00 
used_cpu_user_children:0.00 

# Keyspace 
redis 127.0.0.1:6380> 
+0

Diese Antwort war sehr nützlich für mich: http://StackOverflow.com/A/22511091/1972282 –

Antwort

8

Haben Sie die Anzahl der Datenbanken geändert? Wenn Sie eine sehr große Zahl verwenden, kann die anfängliche Speicherauslastung hoch sein.

+0

ja, die Anzahl der Datenbanken wurde auf eine hohe Zahl gesetzt, nach der Rückkehr zu den Standard-Datenbank-Wert, der Speicher wurde freigegeben, und der Fehler verschwinden, ich bin wieder auf der Strecke, vielen Dank! – Ranch

+0

Was meinst du mit "Anzahl der Datenbanken"? Redis ist nur 1 Datenbank. Sie können nicht mehr haben, es sei denn, Sie sprechen über eine andere Instanz. – Chloe

+0

@chloe: Überprüfen Sie den 'SELECT' Befehl - https://redis.io/commands/SELECT –

0

Speicher in der Config gesteuert wird. Daher ist Ihre Instanz begrenzt, wie es heißt. Sie können entweder in Ihrer redis.conf oder im CLI Tool issue "config get maxmemory" nach dem Limit suchen.

Wenn Sie diese Redis-Instanz verwalten, müssen Sie die Konfigurationsdatei konsultieren und anpassen. Normalerweise gesucht in /etc/redis.conf oder /etc/redis/redis.conf.

Wenn Sie einen Redis-Anbieter verwenden, müssen Sie sich mit der Erhöhung Ihres Limits befassen.

+0

Danke, aber dies hat keine meiner Fragen beantwortet. – Ranch

9

Redis 'maxmemory volatile-lru-Richtlinie kann nicht genügend Speicher freigeben, wenn das maximale Speicherlimit bereits von den nichtflüchtigen Schlüsseln verwendet wird.

0

In unserem Fall wurde maxmemory auf einen hohen Wert gesetzt, dann hat jemand im Team den Wert auf einen niedrigeren Wert geändert, nachdem die Daten bereits gespeichert wurden.

0

Für solch ein Problem, in Betracht ziehen, Ihren maxmemory in redis.conf-Datei zu erhöhen. Es hat mir geholfen.

wie maxmemory war 21000000 für mich dann änderte ich es auf 31000000. Hoffe es hilft.

Verwandte Themen