参数 说明 1.堆内存参数设置 -Xms 或 -XX:InitialHeapSize=n 设置堆的初始值 指令1:-Xms2g 指令2:-XX:InitialHeapSize=2048m -Xmx 或 -XX:MaxHeapSize=n 设置堆区最大值 指令1:-Xmx2g 指令2: -XX:MaxHeapSize=2048m-XX:NewSize=n设置年轻代大小 -Xss 或 -XX:ThreadStackSize=n 每个线程堆栈最大值 指令1:-Xss256k 指令2:-XX:ThreadStackSize=256k 注意: 默认堆栈大小为1M,应该128K就够用,大的堆栈建议256K,栈设置太大,会导致线程创建减少。栈设置小,会导致深入不够,深度的递归会导致栈溢出。 -Xmn 或 -XX:MaxNewSize=n 新生代内存配置 指令1:-Xmn512m 指令2:-XX:MaxNewSize=512m-XX:SurvivorRatio=n 2个survivor区和Eden区大小比率 指令:-XX:SurvivorRatio=8(默认) 年轻代中Eden区与两个Survivor区的比值.注意Survivor区有两个,S区和Eden区在新生代比例为1:8,两个S区2:8 -XX:NewRatio=n 新生代和老年代的占比 -XX:NewRatio=2(默认) 表示新生代:老年代 = 1:2 即老年代占整个堆的2/3;默认值=2 如果-Xms==-Xmx,且设置了-Xmn的情况下,不用设置此参数。 -Duser.timezone=GMT+08指定时区‐Dfile.encoding=UTF‐8指定默认的文件编码 2.垃圾回收器设置 -XX:+PrintGC 简单打印GC日志-XX:+PrintGCDetails详细打印GC日志-XX:+PrintHeapAtGC打印GC前后详细的堆栈信息-XX:+PrintGCTimeStampsGC发生时,额外输出GC发生的时间,该输出时间为虚拟机启动后的时间偏移量-XX:+PrintGCDateStampsGC发生时,带时区的日期打印-XX:+PrintGCApplicationConcurrentTime打印每次垃圾回收前,应用程序未中断执行时间-XX:+PrintGCApplicationStoppedTime打印应用程序由于GC而产生的停顿时间-XX:+PrintReferenceGC跟踪系统内的软引用,弱引用,虚引用和Finallize队列 2.1 GC回收日志打印 -Xloggc:log/gc.log 指定gc日志输出的文件路径。 JDK8开始支持使用%p,%t等占位符来指定GC输出文件。分别表示进程pid和启动时间戳。 例如:  -Xloggc:/data/gclog/gc.log 固定路径名称生成 -Xloggc:/data/gclog/gc-%t.log  根据时间生成 -Xloggc:/data/gclog/gc-%p.log  根据进程pid生成 -XX:+UseGCLogFileRotation滚动生成日志 日志文件达到一定大小后,生成另一个文件,须配置-Xloggc-XX:NumberOfGCLogFiles=n-XX:NumberOfGCLogFiles=4 滚动GC日志文件数,默认0,不滚动,需配置UseGCLogFileRotation,设置为0表示仅通过jcmd命令触发-XX:GCLogFileSize=n-XX:GCLogFileSize=100k GC文件滚动大小,需配置UseGCLogFileRotation,设置为0表示仅通过jcmd命令触发 2.2 堆内存溢出配置 -XX:+HeapDumpOnOutOfMemoryError 内存溢出时导出整个堆信息,让JVM遇到OOM异常时能输出堆内信息,并通过(-XX:+HeapDumpPath)参数设置堆内存溢出快照输出的文件地址 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./log/dump/ -XX:HeapDumpPath指定导出堆的存放路径-XX:OnOutOfMemoryError=“” 利用这个参数,我们可以在系统OOM后,自定义一个脚本,可以用来发送邮件告警信息,可以用来重启系统等等。 -XX:OnOutOfMemoryError="/opt/local/bin/alert.sh" -XX:+HeapDumpBeforeFullGC实现在Full GC前dump -XX:HeapDumpPath=/logs/设置Dump保存的路径-XX:+HeapDumpAfterFullGC 实现在Full GC后dump -XX:HeapDumpPath=/logs/设置Dump保存的路径 2.3 垃圾回收器配置 -XX:+UseSerialGC允许使用串行垃圾收集器。对于不需要垃圾收集的任何特殊功能的小型和简单应用程序,这通常是最佳选择。默认情况下,禁用此选项,并根据计算机的配置和JVM的类型自动选择收集器。-XX:+UseParallelGC 允许使用并行清除垃圾收集器(也称为吞吐量收集器),通过利用多个处理器来提高应用程序的性能。 默认情况下,禁用此选项,并根据计算机的配置和JVM的类型自动选择收集器。如果已启用,则会-XX:+UseParallelOldGC自动启用该选项,除非您明确禁用它。 -XX:+UseParalledlOldGC允许将并行垃圾收集器用于完整的GC。默认情况下,禁用此选项。启用它会自动启用该-XX:+UseParallelGC选项。-XX:+UseConcMarkSweepGC 允许为老年代使用CMS垃圾收集器。Oracle建议您在spam(-XX:+UseParallelGC)垃圾收集器无法满足应用程序延迟要求时使用CMS垃圾收集器。G1垃圾收集器(-XX:+UseG1GC)是另一种选择。 默认情况下,禁用此选项,并根据计算机的配置和JVM的类型自动选择收集器。启用此选项后,将-XX:+UseParNewGC自动设置该选项,您不应禁用该选项,因为JDK 8中已弃用以下选项组合:-XX:+UseConcMarkSweepGC -XX:-UseParNewGC -XX:+UseParNewGC允许在年轻代中使用并行线程进行收集。默认情况下,禁用此选项。设置-XX:+UseConcMarkSweepGC选项时会自动启用它。使用-XX:+UseParNewGC不带选项-XX:+UseConcMarkSweepGC的选择是在JDK 8弃用-XX:+UseG1GC允许使用垃圾优先(G1)垃圾收集器。它是一个服务器式垃圾收集器,针对具有大量RAM的多处理器机器。它以高概率满足GC暂停时间目标,同时保持良好的吞吐量。G1收集器推荐用于需要大堆(大小约为6 GB或更大)且GC延迟要求有限的应用(稳定且可预测的暂停时间低于0.5秒)-XX:ParallelGCThreads=n GC并行执行线程数 -XX:ParallelGCThreads=16 3.辅助指令(查看或修改正在运行的JVM 某项配置) jinfo -flag 参数 pid 查看HeapDumpOnOutOfMemoryError 配置是否开启 jinfo -flag HeapDumpOnOutOfMemoryError 10001 修改HeapDumpOnOutOfMemoryError 配置(-关闭 +开启) jinfo -flag +HeapDumpOnOutOfMemoryError 10001 -XX:+PrintFlagsFinal 查看jvm参数配置 -XX:+PrintFlagsFinal |grep GC 查看与GC相关参数配置 -XX:+PrintCommandLineFlags 打印已经被用户或者当前虚拟机设置过的参数 -XX:+PrintCommandLineFlags -version 查看GC堆的初始大小以及GC收集器类型 4.JDK8的JVM启动参数默认配置

-Xms2g -Xmx2g (按不同容器,4G及以下建议为50%,6G以上,建议设置为70%)-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m-Xss256k-XX:+UseG1GC-XX:MaxGCPauseMillis=200-XX:AutoBoxCacheMax=20000 -XX:+HeapDumpOnOutOfMemoryError (当JVM发生OOM时,自动生成DUMP文件)-XX:HeapDumpPath=/data/logs/gc/-XX:ErrorFile=/data/logs/gc/hs_err_%p.log (当JVM发生崩溃时,自动生成错误日志)-XX:+PrintGCApplicationStoppedTime-XX:+PrintGCDetails-XX:+PrintGCDateStamps-Xloggc:/data/logs/gc/gc-ePrint-service.log 4.禁止和废弃参数选项 -Xincgc 启用增量垃圾收集。此选项在JDK 8中已弃用,无需替换。 -Xrun libname 加载指定的调试/分析库。此选项已被该选项取代-agentlib。 -XX:CMSIncrementalDutyCycle = 百分比 设置允许并发收集器运行的次要集合之间的时间百分比(0到100)。在弃用选项后,此选项在JDK 8中已弃用,没有替换-XX:+CMSIncrementalMode。 -XX:CMSIncrementalDutyCycleMin = 百分比 设置次要集合之间的时间百分比(0到100),它-XX:+CMSIncrementalPacing是启用时占空比的下限。在弃用选项后,此选项在JDK 8中已弃用,没有替换-XX:+CMSIncrementalMode。 -XX:+ CMSIncrementalMode 启用CMS收集器的增量模式。此选项在JDK 8中已弃用,没有替换,以及其他选项CMSIncremental。 -XX:CMSIncrementalOffset = 百分比 设置增量模式占空比在次要集合之间的时间段内向右移动的时间百分比(0到100)。在弃用选项后,此选项在JDK 8中已弃用,没有替换-XX:+CMSIncrementalMode。 -XX:+ CMSIncrementalPacing 根据JVM运行时收集的统计信息,启用增量模式占空比的自动调整。在弃用选项后,此选项在JDK 8中已弃用,没有替换-XX:+CMSIncrementalMode。 -XX:CMSIncrementalSafetyFactor = 百分比 设置计算占空比时用于添加保守性的时间百分比(0到100)。在弃用选项后,此选项在JDK 8中已弃用,没有替换-XX:+CMSIncrementalMode。 -XX:CMSInitiatingPermOccupancyFraction = 百分比 设置启动GC的永久生成占用率(0到100)的百分比。此选项在JDK 8中已弃用,无需替换。 -XX:MaxPermSize = size 设置最大永久生成空间大小(以字节为单位)。此选项在JDK 8中已弃用,并由该-XX:MaxMetaspaceSize选项取代。 -XX:PermSize = size 设置分配给永久生成的空间(以字节为单位),如果超出则会触发垃圾回收。此选项在JDK 8中已弃用,并被该-XX:MetaspaceSize选项取代。 -XX:+ UseSplitVerifier 允许拆分验证过程。默认情况下,此选项在先前版本中已启用,验证分为两个阶段:类型引用(由编译器执行)和类型检查(由JVM运行时执行)。此选项在JDK 8中已弃用,现在默认情况下会对验证进行拆分,而无法将其禁用。 -XX:+ UseStringCache 启用常用分配字符串的缓存。此选项已从JDK 8中删除,无需替换。

好文链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。