gpt4 book ai didi

python - Spark+Python设置GC内存阈值

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:35 25 4
gpt4 key购买 nike

我正在尝试运行一个使用过多内存的Python工作程序(PySpark应用程序),并且由于超出内存限制,我的应用程序正在杀死我的YARN(我正在尝试降低内存使用量,以便能够产生更多 worker )。

我来自 Java/Scala,所以在我看来 Python GC 的工作方式与 JVM 类似...

有没有办法告诉Python它有多少“可用内存”?我的意思是,当堆大小几乎已满时,Java GC 会发生。我想在 Python 上执行相同的操作,因此当内存是垃圾时,yarn 不会因为使用太多内存而终止我的应用程序(我使用的是 Python3.3,并且在我的机器上有内存引用)。

我已经看到了资源硬限制和软限制,但没有文档说明 GC 是否会触发它们。 AFAIK 没有任何东西会通过内存使用触发 GC,有没有人知道这样做的方法?

谢谢

最佳答案

CPython(我假设这是您使用的)与 Java 相比有显着不同。主要的垃圾收集方式是reference counting 。除非您处理循环引用(恕我直言,这在正常的 PySpark 工作流程中并不常见),否则您根本不需要完整的 GC 扫描(一旦数据溢出/腌制,就应该收集与数据相关的对象)。

众所周知,Spark 也会杀死空闲的 Python 工作线程,即使您启用了重用选项,因此它通常会完全跳过 GC。

您可以使用 set_threshold 控制 CPython 垃圾收集行为方法:

gc.set_threshold(threshold0[, threshold1[, threshold2]]

或使用 collect 手动触发 GC 扫描:

gc.collect(generation=2)

但根据我的经验,PySpark 中的大多数 GC 问题都来自 JVM 部分,而不是 Python。

关于python - Spark+Python设置GC内存阈值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45521402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com