2017-08-31 10 views
1

私はこのPythonスクリプトを使用して、あるElastiCache redisインスタンスから別のElastiCache redisインスタンスへデータを移行しています。 Redisパイプライニングを使用してデータをチャンクに移行します。パイプライン処理中のRedisのMemoryError

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

しかし、私はこの奇妙なエラーを取得しています:ノードは6 GBのRAMを持っているよう

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 

はRAMとの問題はありません。次のように

ソースのRedisのメモリプロファイルは次のとおりです。

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 

このための可能な原因となることができますか?

答えて

0

エラーログから、あなたのredisサーバとは関係ありません。このエラーは、すべてのコマンドをメモリバッファにパックすると、Redisクライアントで発生します。

migrate-redis.pyのSCANカウントオプションを小さくして、それをパックするには大きすぎるかどうかをテストすることができます。

+0

私は2000から1にもカウントを減らそうとしましたが、それでもこのエラーが発生します。 –

関連する問題