JVM参数以及Spark不同运行模式下对其参数调用

1.JVM的参数主要分为三类,分别是如下

1堆大小设置
    堆(Heap)和非堆(Non-heap)内存
        JVM 中最大堆大小有三方面限制:
            相关操作系统的数据模型(32-bt还是64-bit)限制;
            系统的可用物理内存限制;
            系统的可用虚拟内存限制。
2.回收器选择
        JVM给了三种选择:串行收集器、并行收集器、并发收集器
3.辅助信息
        JVM提供了大量命令行参数,打印信息,供调试使用

2.常用参数配置汇总

堆以及非堆设置-- 
    JVM最大内存首先取决于实际的物理内存和操作系统
    JVM初始分配的堆内存由-Xms指定,默认是物理内存的1/64;
    JVM最大分配的堆内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;
    JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;
    JVM使用XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
    空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx 相等以避免在每次GC 后调整堆的大小。
     说明:如果-Xmx 不指定或者指定偏小,应用可能会导致java.lang.OutOfMemory错误,此错误来自JVM,不是Throwable的,无法用try...catch捕捉。 
        -Xms:初始堆大小
        -Xmx:最大堆大小
        -XX:NewSize=n:设置年轻代大小
        -XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
        -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
        -XX:PermSize=64M JVM初始分配的非堆内存
        -XX:MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配

收集器设置       
        -XX:+UseSerialGC:设置串行收集器
        -XX:+UseParallelGC:设置并行收集器
        -XX:+UseParalledlOldGC:设置并行年老代收集器
        -XX:+UseConcMarkSweepGC:设置并发收集器
        垃圾回收统计信息
            -XX:+PrintGC
            -XX:+PrintGCDetails
            -XX:+PrintGCTimeStamps
            -Xloggc:filename
        并行收集器设置
            -XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。
            -XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
            -XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)
        并发收集器设置
            -XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。
            -XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数。

    辅助信息
            -XX:+PrintGC
            -XX:+PrintGCDetails
            -XX:+PrintGCTimeStamps 
            -Xloggc:filename:
    调优总结
        虚拟机的设置

开发环境中的设置

当在命令提示符下启动并使用JVM时
    Eclipse中JVM内存设置
            eclipse.ini内存设置
    Idea设置内存
    idea64.exe.vmoptions

Spark中的JVM参数设置

(1)Driver的JVM参数:
        如果是yarn-cluster模式,
            -Xmx,-Xms--读取的是spark-default.conf文件中的spark.driver.extraJavaOptions对应的JVM参数值。
            PermSize-------读取的是spark-default.conf文件中的spark.driver.extraJavaOptions对应的JVM参数值。
            GC方式--------读取的是spark-default.conf文件中的spark.driver.extraJavaOptions对应的参数值。

        如果是yarn-client模式,
            -Xmx,-Xms--默认读取spark-env文件中的SPARK_DRIVER_MEMORY值,-Xmx,-Xms值一样大小;
            PermSize-----是默认读取spark-class文件中的JAVA_OPTS="-XX:MaxPermSize=256m $OUR_JAVA_OPTS"值;
            GC方式----默认读取的是spark-class文件中的JAVA_OPTS;
以上值最后均可被spark-submit工具中的--driver-java-options参数覆盖。

(2)Executor的JVM参数:
        -Xmx,-Xms,
                    如果是yarn-cluster模式,则读取的是spark-default.conf文件中的spark.executor.extraJavaOptions对应的JVM参数值。
                    如果是yarn-client模式,则默认读取spark-env文件中的SPARK_EXECUTOR_MEMORY值,-Xmx,-Xms值一样大小;                   
        PermSize,两种模式都是读取的是spark-default.conf文件中的spark.executor.extraJavaOptions对应的JVM参数值。
        GC方式,两种模式都是读取的是spark-default.conf文件中的spark.executor.extraJavaOptions对应的JVM参数值

cd /etc/spark/conf
ll
cat  spark-defaults.conf
        spark.yarn.driver.memoryOverhead 384
        spark.yarn.executor.memoryOverhead 384
cat spark-env.sh


cd /usr/hdp/2.4.0.0-169/spark/bin
ll
cat spark-class

spark-env

blogroll

social