JVM优化实战
# JVM优化实战
# 服务器配置
- 8 核心 16G
- JDK1.8
# JVM 核心参数
因为是电商项目,需要使用并发垃圾回收器相关的参数,所以这里就不介绍非并发垃圾回收器的相关参数了,有需要请百度查询。
# 并行收集器相关参数
|参数名称| 含义|默认值|| |-XX:+UseParallelGC | Full GC采用parallel MSC(此项待验证) |选择垃圾收集器为并行收集器.此配置仅对年轻代有效.即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集.(此项待验证) |
|-XX:+UseParNewGC |设置年轻代为并行收集 | 可与CMS收集同时使用JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值 |
|-XX:ParallelGCThreads| 并行收集器的线程数 | 此值最好配置与处理器数目相等 同样适用于CMS | |-XX:+UseParallelOldGC |年老代垃圾收集方式为并行收集(Parallel Compacting) |这个是JAVA 6出现的参数选项| |-XX:MaxGCPauseMillis |每次年轻代垃圾回收的最长时间(最大暂停时间) |如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值.| |-XX:+UseAdaptiveSizePolicy| 自动选择年轻代区大小和相应的Survivor区比例 | 设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开. | |-XX:GCTimeRatio |设置垃圾回收时间占程序运行时间的百分比 |公式为1/(1+n) | |-XX:+ScavengeBeforeFullGC Full GC前调用YGC true |Do young generation GC prior to a full GC. (Introduced in 1.4.1.) |
# CMS相关参数
|-XX:+UseConcMarkSweepGC | 使用CMS内存收集 | 测试中配置这个以后,-XX:NewRatio=4的配置失效了,原因不明.所以,此时年轻代大小最好用-Xmn设置.??? | |-XX:+AggressiveHeap | |试图是使用大量的物理内存 长时间大内存使用的优化,能检查计算资源(内存, 处理器数量) 至少需要256MB内存 大量的CPU/内存, (在1.4.1在4CPU的机器上已经显示有提升)| |-XX:CMSFullGCsBeforeCompaction |多少次后进行内存压缩 |由于并发收集器不对内存空间进行压缩,整理,所以运行一段时间以后会产生"碎片",使得运行效率降低.此值设置运行多少次GC以后对内存空间进行压缩,整理.| |-XX:+CMSParallelRemarkEnabled |降低标记停顿 || |-XX+UseCMSCompactAtFullCollection | 在FULL GC的时候, 对年老代的压缩 | CMS是不会移动内存的, 因此, 这个非常容易产生碎片, 导致内存不够用, 因此, 内存的压缩这个时候就会被启用。 增加这个参数是个好习惯。 可能会影响性能,但是可以消除碎片| |-XX:+UseCMSInitiatingOccupancyOnly 使用手动定义初始化定义开始CMS收集 禁止hostspot自行触发CMS GC| |-XX:CMSInitiatingOccupancyFraction=70| 使用cms作为垃圾回收 使用70%后开始CMS收集| 92 |为了保证不出现promotion failed(见下面介绍)错误,该值的设置需要满足以下公式CMSInitiatingOccupancyFraction计算公式| |-XX:CMSInitiatingPermOccupancyFraction 设置Perm Gen使用到达多少比率时触发| 92 | |-XX:+CMSIncrementalMode 设置为增量模式| | 用于单CPU情况| |-XX:+CMSClassUnloadingEnabled |||
# 未进行任何优化
系统QPS 较低, 所能承受的并发较低
# JVM 参数如下
-Xms1024m
-Xmx1024m
-XX:MaxMetaspaceSize=256m
2
3
可以看出默认所提供的 JVM 堆内存远远不足以维持系统的运行体量