Spark處理數據出現大量GC導致處理性能變慢的原因及解決方案


Spark應用程序處理的大數據多是運行於JVM上的,經常要面對GC優化問題。下面給出由於Linux系統原因導致的GC耗時異常的處理方式:

打開Spark的GC日志,在spark-env.sh文件中的SPARK_JAVA_OPTS參數上添加 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps

如果每次GC回收的量基本相同,但是在某一時間點,耗時異常大,這種情況下,有兩種可能:

1、GC收集對象所在內存被swap了

2、GC線程進入IO等待狀態,因為系統IO繁忙

這兩種情況可以由GC日志的/user/sys/real的值得pattern來識別,如果為Low user time,high system time,long GC pause說明數據內存被swap了,如果是Low user time,low system time,long GC pause說明GC線程進入IO等待狀態。

 

處理方式:

對於情況1,確保JVM內存不被swap,可以啟動參數-XX:+AlwaysPreTouch執行sysctl -w vm.swappiness=0 禁用swap

對於情況2,均勻系統IO負載,可以通過執行

sysctl -w vm.dirty_writeback_cenisecs=500

sysctl -w vm.dirty_expire_centisecs=500來實現

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM