Wachsende Speichernutzung (Leck?) Im Dask Distributed Profiler
Ich habe eine länger laufende Aufgabe, die ich an einen Dask-Cluster sende (Worker führt 1 Prozess und 1 Thread aus) und verwende sie tracemalloc, um die Speichernutzung zu verfolgen. Die Aufgabe kann so lange ausgeführt werden, dass sich die Speichernutzung aufbaut und alle möglichen Probleme verursacht hat. Hier ist die Struktur, wie ich verwendet habe 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))
Ich erhalte Folgendes (ein bisschen aufgeräumt), das zeigt, dass der Profiler in Dask Distributed Speicherplatz aufbaut. Dies war nach der zweiten Iteration und diese Speichernummern wachsen linear.
[ 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
Weiß jemand, wie man den Profiler bereinigt oder nicht verwendet (wir verwenden das Dashboard nicht, also brauchen wir es nicht)?
Antworten
Ich habe die folgenden Umgebungsvariablen für die Worker-Pods festgelegt, damit die Profilerstellung drastisch reduziert wird. Es scheint zu funktionieren.
DASK_DISTRIBUTED__WORKER__PROFILE__INTERVAL=10000ms
DASK_DISTRIBUTED__WORKER__PROFILE__CYCLE=1000000ms
Die Standardeinstellungen finden Sie hier: https://github.com/dask/distributed/blob/master/distributed/distributed.yaml#L74-L76
ETA: @rpanai Dies ist das, was wir im K8-Manifest für die Bereitstellung haben
spec:
template:
spec:
containers:
- env:
- name: DASK_DISTRIBUTED__WORKER__PROFILE__INTERVAL
value: 10000ms
- name: DASK_DISTRIBUTED__WORKER__PROFILE__CYCLE
value: 1000000ms