【问题标题】:Growing memory usage (leak?) in Dask Distributed profilerDask 分布式分析器中的内存使用量增加(泄漏?)
【发布时间】:2020-09-01 01:30:04
【问题描述】:

我有一个运行时间较长的任务,我提交给 Dask 集群(worker 正在运行 1 个进程和 1 个线程),我使用 tracemalloc 来跟踪内存使用情况。该任务可以运行足够长的时间,以至于内存使用量增加并导致各种问题。这是我使用tracemalloc的结构。

def task():
    tracemalloc.start()
    ...
    snapshot1 = tracemalloc.take_snapshot()
    for i in range(10):
        ...
        snapshot2 = tracemalloc.take_snapshot()
        top_stats = snapshot2.compare_to(snapshot1, "lineno")
        print("[ Top 6 differences ]")
        for stat in top_stats[:6]:
            print(str(stat))

我得到以下信息(清理了一点),这表明 Dask Distributed 中的分析器正在累积内存。这是在第二次迭代之后,这些内存数量呈线性增长。

[ Top 6 differences ]
/usr/local/lib/python3.8/site-packages/distributed/profile.py:112:
    size=137 MiB (+113 MiB), count=1344168 (+1108779), average=107 B
/usr/local/lib/python3.8/site-packages/distributed/profile.py:68:
    size=135 MiB (+110 MiB), count=1329005 (+1095393), average=106 B
/usr/local/lib/python3.8/site-packages/distributed/profile.py:48:
    size=93.7 MiB (+78.6 MiB), count=787568 (+655590), average=125 B
/usr/local/lib/python3.8/site-packages/distributed/profile.py:118:
    size=82.3 MiB (+66.5 MiB), count=513462 (+414447), average=168 B
/usr/local/lib/python3.8/site-packages/distributed/profile.py:67:
    size=64.4 MiB (+53.1 MiB), count=778747 (+647905), average=87 B
/usr/local/lib/python3.8/site-packages/distributed/profile.py:115:
    size=48.1 MiB (+40.0 MiB), count=787415 (+655449), average=64 B

有谁知道如何清理探查器或不使用它(我们不使用仪表板,所以我们不需要它)?

【问题讨论】:

  • 嗯,分析器的开销当然不应该那么高,我已经打开了一个要进一步跟踪的问题:github.com/dask/distributed/issues/4091。如果您可以在那里评论一个可重现的示例来显示您的问题,那将非常有用。谢谢!
  • 嘿,谢谢。看看我能做什么。

标签: memory dask dask-distributed


【解决方案1】:

我在工作 pod 上设置了以下环境变量,这样可以显着减少分析。它似乎正在工作。

DASK_DISTRIBUTED__WORKER__PROFILE__INTERVAL=10000ms 
DASK_DISTRIBUTED__WORKER__PROFILE__CYCLE=1000000ms

可以在这里找到默认值:https://github.com/dask/distributed/blob/master/distributed/distributed.yaml#L74-L76

ETA:@rpanai 这是我们在 K8s 清单中用于部署的内容

spec:
  template:
    spec:
      containers:
      - env:
        - name: DASK_DISTRIBUTED__WORKER__PROFILE__INTERVAL
          value: 10000ms
        - name: DASK_DISTRIBUTED__WORKER__PROFILE__CYCLE
          value: 1000000ms

【讨论】:

  • 您介意告诉您如何在 pod 中设置这些变量吗?
猜你喜欢
  • 2013-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-09
相关资源
最近更新 更多