清理Dask工作者的内存

问题描述 投票:0回答:1

我正在多节点分布式Dask群集上运行多个并行任务。但是,一旦任务完成,工作人员仍会保留大量内存,并且群集很快就会被填满。

我在每个任务之后都尝试过client.restart()client.cancel(df)之后,第一个杀死了工人,并将CancelledError发送给其他正在运行的任务,这很麻烦,第二个并没有太大帮助,因为我们使用了大量的自定义对象和函数在dask的map函数中。为已知变量添加delgc.collect()也无济于事。

我确定保留的大部分内存是由于自定义的python函数和用client.map(..)调用的对象。

我的问题是:

  1. 是否有从命令行或其他方式使用的类似于trigger worker restart if no tasks are running right now的方式。
  2. 如果没有,该问题的可能解决方案是什么?对我来说,避免在Dask任务中使用自定义对象和纯python函数是不可能的。
python dask dask-distributed
1个回答
0
投票

如果没有对期货的引用,那么Dask应该删除对您由此创建的Python对象的所有引用。有关如何进行调查的更多信息,请参见https://www.youtube.com/watch?v=MsnzpzFZAoQ

如果您的自定义Python代码确实有其自身的内存泄漏,那么可以,您可以要求Dask工作者定期重新启动自己。请参见dask-worker --help手册页,并查找以--lifetime]开头的关键字

© www.soinside.com 2019 - 2024. All rights reserved.