内存调优
设置heap大小
这个非常重要,通常只要这里设置够了,就不会出现溢出。
-Xms4096m -Xmx4096m
or
-Xms4g -Xmx4g
这两个值的大小应该一样,这样减少转换时初始化时间
64位一般可支持的最大内存是多少?如果物理内存为32G(一般为物理内存的90%,也就是27~28G)
新生代和老年代的大小
这个参数相当于设置等值的最小、最大新生代,NewRatio这个设置新、老代比例,NewRatio=1
代表,两个相等大小
-Xmn1g
这个值如果不设的话,默认只有6M
设置持久代大小
同理,这两个值应该是一样的(jdk7)
-XX:PermSize=512m -XX:MaxPermSize=512m
JDK8起用这两个参数
-XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m
设置code cache
-XX:ReservedCodeCacheSize=1024m -XX: UseCompressedOops
设置字符串压缩
-XX:-CompactStrings
GC调优
并发GC线程设置
服务器总的线程数/jvm实例数就行了,如果一台服务器上有4个jvm。比如2颗6核超线程(超线程后1个核相当于2个线程)就是24/4=6调,置ParallelGCThreads
时最大不要超过6就行了。
Mac笔记本4核8线程,一个jvm,ParallelGCThreads=CPU 数量/JVM 数量
-XX:ParallelGCThreads=8
CMS基本配置
配置了cms,-XX: UseParNewGC
这个参数就不用设了,因为设了cms这个就自动打开了
-XX: UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX: UseCMSInitiatingOccupancyOnly
日志基本配置
-Xloggc:/var/log/gc-sms.log -XX: PrintGCDateStamps -XX: PrintGCDetails
例子
linkedin的一个例子如下
代码语言:javascript复制// JVM sizing options
-Xms40g -Xmx40g -XX:MaxDirectMemorySize=4096m -XX:PermSize=256m -XX:MaxPermSize=256m
// Young generation options
-XX:NewSize=6g -XX:MaxNewSize=6g -XX: UseParNewGC -XX:MaxTenuringThreshold=2 -XX:SurvivorRatio=8 -XX: UnlockDiagnosticVMOptions -XX:ParGCCardsPerStrideChunk=32768
// Old generation options
-XX: UseConcMarkSweepGC -XX:CMSParallelRemarkEnabled -XX: ParallelRefProcEnabled -XX: CMSClassUnloadingEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX: UseCMSInitiatingOccupancyOnly
// Other options
-XX: AlwaysPreTouch -XX: PrintGCDetails -XX: PrintGCTimeStamps -XX: PrintGCDateStamps -XX: PrintTenuringDistribution -XX: PrintGCApplicationStoppedTime -XX:-OmitStackTraceInFastThrow
我的常用配置
代码语言:javascript复制-Xms14g
-Xmx14g
-Xmn5g
-XX:MetaspaceSize=512m
-XX:MaxMetaspaceSize=512m
-XX:ReservedCodeCacheSize=1024m
-XX: UseCompressedOops
-XX: UseConcMarkSweepGC
-XX:ParallelGCThreads=8
-XX:CMSInitiatingOccupancyFraction=75
-XX: UseCMSInitiatingOccupancyOnly
-Xloggc:/var/log/gc-sms.log
-XX: PrintGCDateStamps
-XX: PrintGCDetails
参考: Java Platform, Standard Edition Java Virtual Machine Guide
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100365.html原文链接: