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