Dask - слишком много открытых файлов (сокетов) - PullRequest
0 голосов
/ 04 февраля 2020

У меня слишком много проблем с открытыми файлами при распространении Tornado и Dask.

Чтобы смоделировать то, с чем я сталкиваюсь, следующий код:

import time
from concurrent.futures._base import CancelledError
from distributed import Client, as_completed
import dask
import numpy as np

client_url = 'x.x.x.x:port' # replace with ur dask distributed cluster. I started with 1 process and 16 threads
client = Client(client_url)

cols = ['id', 'name', 'x',  'y'] * 1000
df = dask.datasets.timeseries()

def some_py_fn(col_name):
    # simulating pure python operation
    time.sleep(2)
    np.correlate([1, 2, 3], [0, 1, 0.5]) #just for the sake of it
    return df[col_name].count().compute()

for i in range(100):
    print(i)
    futures = client.map(some_py_fn, cols)
    for batch in as_completed(futures, with_results=True, raise_errors=False).batches():
        for _, result in batch:
            if isinstance(result, CancelledError):
                raise CancelledError()
            count = result
            del result
del df

client.close()

Что происходит:

Dask продолжает открывать новые файлы, включая сокеты. В данном случае, для меня система начала примерно с 5 тыс. Открытых файлов до 18071 г., в конце операции 1096 из которых являются сокетами.

При сложных операциях одна за другой это просто взрывается. Я изо всех сил стараюсь симулировать то же самое здесь. Несмотря на то, что количество открытых файлов здесь относительно невелико, проблема, с которой я сталкиваюсь, - это открытые файлы порядка - 3878443. Таким образом, создание неограниченного количества открытых файлов на самом деле не является решением.

Кроме того, многое из того, что открывает dask, это socket, и оно не закрывается после запуска. Трудно предсказать, когда он откроет новый сокет, но примерно 40% из вышеуказанного числа были сокетами. Dask также открывает один и тот же файл библиотеки несколько раз. Вот образец из вышеупомянутого маленького пробега.

dask-sche 18342             ec2-user  mem       REG              259,3   1359260   51824178 /home/ec2-user/kenv/lib/python3.6/site-packages/numpy/random/common.cpython-36m-x86_64-linux-gnu.so
dask-sche 18342 18361       ec2-user  mem       REG              259,3   1359260   51824178 /home/ec2-user/kenv/lib/python3.6/site-packages/numpy/random/common.cpython-36m-x86_64-linux-gnu.so
dask-sche 18342 18501       ec2-user  mem       REG              259,3   1359260   51824178 /home/ec2-user/kenv/lib/python3.6/site-packages/numpy/random/common.cpython-36m-x86_64-linux-gnu.so
dask-sche 18342 18502       ec2-user  mem       REG              259,3   1359260   51824178 /home/ec2-user/kenv/lib/python3.6/site-packages/numpy/random/common.cpython-36m-x86_64-linux-gnu.so
dask-work 18366             ec2-user  mem       REG              259,3   1359260   51824178 /home/ec2-user/kenv/lib/python3.6/site-packages/numpy/random/common.cpython-36m-x86_64-linux-gnu.so
dask-work 18366 18383       ec2-user  mem       REG              259,3   1359260   51824178 /home/ec2-user/kenv/lib/python3.6/site-packages/numpy/random/common.cpython-36m-x86_64-linux-gnu.so
dask-work 18366 18385       ec2-user  mem       REG              259,3   1359260   51824178 /home/ec2-user/kenv/lib/python3.6/site-packages/numpy/random/common.cpython-36m-x86_64-linux-gnu.so
dask-work 18366 18404       ec2-user  mem       REG              259,3   1359260   51824178 /home/ec2-user/kenv/lib/python3.6/site-packages/numpy/random/common.cpython-36m-x86_64-linux-gnu.so

Количество открытых файлов постоянно увеличивается. Дайте мне знать, как уменьшить количество подключений к сокету и многократное открытие одних и тех же файлов.

Env:

Tornado - 5.1.1
distributed - 2.9.3
dask - 2.9.2
...