2017-08-31 3 views
1

J'utilise ce script python pour migrer des données d'une instance Redis ElastiCache vers une autre. Il utilise la redirection redis pour migrer les données en morceaux.MemoryError dans Redis lors du traitement en pipeline

https://gist.github.com/thomasst/afeda8fe80534a832607

Mais je reçois cette erreur étrange:

Traceback (most recent call last):###########           | ETA: 0:00:12 
    File "migrate-redis.py", line 95, in <module> 
    migrate() 
    File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 664, in __call__ 
    return self.main(*args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 644, in main 
    rv = self.invoke(ctx) 
    File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 837, in invoke 
    return ctx.invoke(self.callback, **ctx.params) 
    File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 464, in invoke 
    return callback(*args, **kwargs) 
    File "migrate-redis.py", line 74, in migrate 
    results = pipeline.execute(False) 
    File "/usr/local/lib/python2.7/dist-packages/redis/client.py", line 2593, in execute 
    return execute(conn, stack, raise_on_error) 
    File "/usr/local/lib/python2.7/dist-packages/redis/client.py", line 2446, in _execute_transaction 
    all_cmds = connection.pack_commands([args for args, _ in cmds]) 
    File "/usr/local/lib/python2.7/dist-packages/redis/connection.py", line 637, in pack_commands 
    output.append(SYM_EMPTY.join(pieces)) 
MemoryError 

Il n'y a aucun problème avec la RAM comme nœud a 6 Go de RAM.

La mémoire Profil de Redis source est la suivante:

used_memory:1483900120 
used_memory_human:1.38G 
used_memory_rss:1945829376 
used_memory_peak:2431795528 
used_memory_peak_human:2.26G 
used_memory_lua:86016 
mem_fragmentation_ratio:1.31 
mem_allocator:jemalloc-3.6.0 

Quelle peut être la cause possible pour cela?

Répondre

0

De votre journal des erreurs, il n'a aucune relation avec votre serveur redis. L'erreur se produit dans votre client redis lorsqu'il regroupe toutes les commandes dans un tampon mémoire. Peut-être pourriez-vous essayer de réduire l'option SCAN count de votre fichier migrate-redis.py pour tester si elle est trop volumineuse pour l'emballer.

+0

J'ai essayé de réduire le nombre de 2000 à 1 également, mais il donne quand même cette erreur. –