web-dev-qa-db-fra.com

Comment déboguer l'erreur "Commande MOO non autorisée lorsque la mémoire est utilisée> 'maxmemory'" dans Redis

J'obtiens "Commande OOM non autorisée" lorsque j'essayais de définir une clé, maxmemory est défini sur 500M avec maxmemory-policy "volatile-lru", je règle TTL pour chaque clé envoyée à redis.

INFO La commande retourne: used_memory_human:809.22M

  1. Si maxmemory est défini sur 500 M, comment ai-je atteint 809 M?
  2. La commande INFO ne montre aucun espace de clé, comment est-ce possible? 
  3. KEYS * renvoie "(liste vide ou set)", j'ai essayé de changer le numéro de base de données, toujours pas de clé trouvée.

Voici le résultat de la commande info:

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>
21
Ranch

Avez-vous une chance de changer le nombre de bases de données? Si vous utilisez un très grand nombre, l'utilisation initiale de la mémoire peut être élevée

10
Eyal Post

La règle maxmemory volatile-lru de Redis peut ne pas libérer suffisamment de mémoire si la limite maxmemory est déjà utilisée par les clés non volatiles.

11
ColinM

Pour un tel problème, envisagez d'augmenter votre maxmemory dans le fichier redis.conf . Cela m'a aidé.

comme maxmemory était 21000000 pour moi puis je l'ai changé pour 31000000. J'espère que cela aide.

0
Yogesh Sanchihar

Dans notre cas, maxmemory était défini sur un montant élevé, puis un membre de l'équipe l'a modifié pour un montant inférieur après que les données aient déjà été stockées.

0
lfender6445

La mémoire est contrôlée dans la configuration. Ainsi, votre instance est limitée comme il est dit. Vous pouvez soit regarder dans votre redis.conf ou à partir du problème de l'outil CLI "config get maxmemory" pour obtenir la limite. 

Si vous gérez cette instance Redis, vous devrez consulter et ajuster le fichier de configuration. Habituellement recherché dans /etc/redis.conf ou /etc/redis/redis.conf. 

Si vous utilisez un fournisseur Redis, vous devrez vous entendre avec lui pour augmenter votre limite.

0
The Real Bill