Java虚拟机调优

Java虚拟机调优
    
    1、背景:
        如果在持久化RDD的时候,持久化了大量的数据,那么Java虚拟机的垃圾回收就可能成为一个性能瓶颈。
        Java虚拟机会定期进行垃圾回收,此时就会追踪所有Java对象,并且在垃圾回收时,追中找到那些已经不再使用的对象,清理旧对象,给新对象腾出空间。
        
        垃圾回收的性能开销,和内存中的对象数量成正比。
        在做Java虚拟机调优前,必须要做好上面其他调优工作,这样才有意义。
        因为上面的调优工作,是为了节省内存的开销。
    
    2、GC 原理

    3、监测垃圾回收。
        
        我们可以对垃圾回收进行监测,包括多久进行一次垃圾回收,以及每次垃圾回收耗费的事件。
        在 spark-submit脚本中,添加一个配置:
        --conf "spark.executor.extraJavaOptions=-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimesStamps"

        注意:输出到worker的日志中,而不是driver日志。
        
        /usr/local/spark-2.1.0-bin-hadoop2.7/work/app-20190705055405-0000/0
        driver日志
        
        /usr/local/spark-2.1.0-bin-hadoop2.7/logs
        worker日志

    4、优化Executor内存比例
        目的:减少垃圾回收。
        
        对于GC调优来说,最重要的调节,RDD缓存占用的内存空间 与 算子执行是创建对象所占用的内存空间 的比例。
        默认情况下,Spark使用每个Executor 60%的内存空间来缓存RDD,那么在task执行期间创建的对象,只有40%的内存空间来存放。
        
        在这种情况下,很有可能因为内存不足,task创建的对象过大,导致40%的内存空间不够用,触发Java虚拟机垃圾回收操作。
        在极端的情况下,垃圾回收操作会被频繁触发。
        
        方法:
        conf.set("spark.storage.memoryFraction",0.5)
        将RDD缓存占用空间比例降低到50%


七、shuffle
    spark 2.0以后,shuffle调优问题已经被 spark 官方解决。但是1.x中,还有问题。

Spark内核博客
https://ymgd.github.io/codereader/2018/03/03/%E6%B7%B1%E5%85%A5Spark%E5%86%85%E6%A0%B8/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值