1、什么是GC
垃圾收集 Garbage Collection 通常被稱為“GC”,回收沒用的對象以釋放空間。
GC 主要回收的是虛擬機堆內存的空間,因為new 的對象主要是在堆內存。
2、頻繁GC的影響及優化方法
(1)頻繁的GC影響
task運行期間動態創建的對象使用的Jvm堆內存的情況
當給spark任務分配的內存少了,會頻繁發生minor gc(年輕代gc),如果存活時間長的對象特別多,就會發生full gc(老年代gc)。
當頻繁的new對象時,導致很快進入老年代,這樣也可能發生full gc。
頻繁gc 會影響 工作任務線程的正常執行,從而降低spark 應用程序的性能。可以增加executor-memory內存數量。
(2)優化方案
a)優化代碼,避免頻繁new 同一個對象,導致的頻繁gc。
b)調節可用存儲內存和執行內存的比例,以減少gc 發生的頻率。
c)對應存儲內存,可以考慮存儲序列化后的對象,調節序列化級別為MEMORY_DISK_SER或MEMORY_ONLY_SER,這樣占用內存空間小。
d)還可以使用Kryo序列化類庫,進行序列化,因為kryo序列化方法可以進一步的降低RDD的parition的內存占用量。