我試圖運行Python工人(PySpark應用程序),它使用了太多的內存和我的應用程序被殺,因爲超過內存限制(我試圖降低內存的我YARN用法爲了能夠產生更多的工人)。星火+ Python的設置GC內存閾值
我來自的Java/Scala的,所以Python GC工作在我的頭上比JVM類似...
有沒有辦法來告訴Python什麼的「可用內存」的數量有?我的意思是,當您的堆大小几乎滿時,Java GC。我想對Python執行相同的操作,所以yarn不會殺死我的應用程序,因爲當內存是垃圾時(我在Python3.3上並且存在內存引用@我的機器時)使用了太多內存。
我見過資源的硬性限制和軟性限制,但沒有文檔說GC是否觸發它們。 AFAIK沒有通過內存使用觸發GC,any1是否知道這樣做的方法?
謝謝,Java相比,
謝謝(還是)。是的,我正在使用Cython。我看到了這些閾值選項,但AFAIK它們不會觸發所使用的內存量,我在一些副本(我有一些大型熊貓內存複製,沒有執行正常的PySpark工作流程)後執行了手動收集。我沒有JVM問題,因爲我將序列化程序更改爲CompressedSerializer(PickleSerializer())作爲默認設置(SparkContext構造函數中的一個)。與其他問題(mem基本上)相比,我的CPU非常強大,運行起來很輕鬆,所以Compression在這裏效果很好(我甚至比沒有它更快)。 – BiS
*添加到我的prev評論,所以我想沒有選擇根據內存大小做它。我讀過默認的GC觸發每個X時間/分配(我不想等待這些,因爲GC發生YARN),所以現在我要按照你所說的手動調用它。 令我百思不解的是NO1提到CompressedSerializer爲PySpark,他們用它作爲默認的廣播,但我沒有發現任何關於它的谷歌(我發現它由潛伏到代碼)。至少對我而言,這是奇蹟。 – BiS