【问题标题】:MemoryError in Redis while Pipelining流水线时Redis中的MemoryError
【发布时间】:2018-02-09 01:55:45
【问题描述】:

我正在使用这个 python 脚本将数据从一个 ElastiCache redis 实例迁移到另一个实例。它使用 redis 流水线以块的形式迁移数据。

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

但我收到了这个奇怪的错误:

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

由于节点有 6 GB 的 RAM,因此 RAM 没有问题。

源redis的Memory Profile如下:

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

这可能是什么原因?

【问题讨论】:

    标签: python redis amazon-elasticache redis-py


    【解决方案1】:

    从您的错误日志来看,它与您的 redis 服务器无关。当您的 redis 客户端将所有命令打包到内存缓冲区中时,该错误就会发生。

    也许您可以尝试减少 migrate-redis.py 中的 SCAN 计数选项,以测试它是否太大而无法打包。

    【讨论】:

    • 我也尝试将计数从 2000 减少到 1,但仍然出现此错误。
    猜你喜欢
    • 2014-04-04
    • 2017-03-24
    • 2015-06-02
    • 2019-03-22
    • 2013-07-12
    • 2023-01-22
    • 2012-05-17
    • 2019-01-22
    • 1970-01-01
    相关资源
    最近更新 更多