jvm 优化 参数解析

    科技2024-05-08  91

    jvm 优化 参数解析

    jvm 命令行参数

    查看# 查看默认参数配置 java -XX:+PrintCommandLineFlags -version # 查看所有可配置参数 java -XX:+PrintFlagsFinal -version 配置 没有gc# 没有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
    Processed: 0.013, SQL: 8