jvm 优化 参数解析
jvm 命令行参数
查看
java -XX:+PrintCommandLineFlags -version
java -XX:+PrintFlagsFinal -version
配置 没有gc
jarPath='..'
moduleName='api'
mkdir -p $jarPath/log
jarName=${moduleName}.jar
nohup java -server -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Dfile.encoding=UTF-8 -Xms2048m -Xmx2048m -Xmn512m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC -jar -Dspring.profiles.active=prod,quartz "${jarPath}/${jarName}" > "${jarPath}/log/${moduleName}-console.log" &
带gcjarPath='..'
moduleName='api'
mkdir -p $jarPath/log
jarName=${moduleName}.jar
nohup java -server -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Dfile.encoding=UTF-8 -Xms2048m -Xmx2048m -Xmn512m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:../gc-${moduleName}.log -jar -Dspring.profiles.active=prod,quartz "${jarPath}/${jarName}" > "${jarPath}/log/${moduleName}-console.log" &
疑惑参数解析
-XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m 这个JVM参数是指Metaspace扩容时触发FullGC的初始化阈值,也是最小的阈值那么-XX:MetaspaceSize=256m的含义到底是什么呢?其实,这个JVM参数是指Metaspace扩容时触发FullGC的初始化阈值,也是最小的阈值。这里有几个要点需要明确:
如果没有配置-XX:MetaspaceSize,那么触发FGC的阈值是21807104(约20.8m),可以通过jinfo -flag MetaspaceSize pid得到这个值;
如果配置了-XX:MetaspaceSize,那么触发FGC的阈值就是配置的值;
Metaspace由于使用不断扩容到-XX:MetaspaceSize参数指定的量,就会发生FGC;且之后每次Metaspace扩容都可能会发生FGC(至于什么时候会,比较复杂,跟几个参数有关);
如果Old区配置CMS垃圾回收,那么扩容引起的FGC也会使用CMS算法进行回收;
如果MaxMetaspaceSize设置太小,可能会导致频繁FullGC,甚至OOM;
MetaspaceSize和MaxMetaspaceSize设置一样大;
具体设置多大,建议稳定运行一段时间后通过jstat -gc pid确认且这个值大一些,对于大部分项目256m即可。
链接:https://www.jianshu.com/p/b448c21d2e71
-XX:PermSize=256m -XX:MaxPermSize=256mJDK8+移除了Perm,引入了Metapsace
转载请注明原文地址:https://blackberry.8miu.com/read-30826.html