關於Spark運行流式計算程序中跑一段時間出現GC overhead limit exceeded

最近在升級一個框架的時候,發現某個流式計算程序每隔一定的時間就會出現GC overhead limit exceeded的錯誤問題。


這個問題肯定是內存不夠,但是初始設置的內存是夠的啊,於是進行各種內存優化,如將變量定義在循環體外等控制,但是發現只是將這個間隔時間往後推了一下而已。


還是沒有找到癥結所在。


後來再分析了下,可能是哪些變量佔了內存沒有及時釋放掉,


看到了好幾個dataframe的cache代碼,但這個cache應該 spark有個自動釋放清理的機制的。


爲了進行測試,手動添加unpersist進行內存釋放,再上線,發現問題果然消失了。


原來這個問題真的是內存的問題。


再仔細看了下官方說明。

Spark automatically monitors cache usage on each node and drops out old data partitions in a least-recently-used (LRU) fashion. If you would like to manually remove an RDD instead of waiting for it to fall out of the cache, use the RDD.unpersist() method.


可能還是這個自動機制在流式計算中有點趕不上,導致出現的錯誤。這個坑還是非常深。

發佈了124 篇原創文章 · 獲贊 13 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章