promontion faild产生的原因是EDEN空间不足的情况下将EDEN与From survivor中的存活对象存入To survivor区时,To survivor区的空间不足,再次晋升到old gen区,而old gen区内存也不够的情况下产生了promontion faild从而导致full gc.那可以推断出:eden+from survivor < old gen区剩余内存时,不会出现promontion faild的情况,即:
(Xmx-Xmn)*(1-CMSInitiatingOccupancyFraction/100)>=(Xmn-Xmn/(SurvivorRatior+2)) 进而推断出:
CMSInitiatingOccupancyFraction <=((Xmx-Xmn)-(Xmn-Xmn/(SurvivorRatior+2)))/(Xmx-Xmn)*100
例如:
当xmx=2048 xmn=256 SurvivorRatior=8(默认值)时 CMSInitiatingOccupancyFraction<=((2048-256)-(2048-256/(8+2)))/(2048-256)*100=87.14
当xmx=128 xmn=36 SurvivorRatior=1时 CMSInitiatingOccupancyFraction<=((128.0-36)-(36-36/(1+2)))/(128-36)*100 =73.913
当xmx=128 xmn=24 SurvivorRatior=1时 CMSInitiatingOccupancyFraction<=((128.0-24)-(24-24/(1+2)))/(128-24)*100=84.615…
当xmx=3000 xmn=600 SurvivorRatior=1时 CMSInitiatingOccupancyFraction<=((3000.0-600)-(600-600/(1+2)))/(3000-600)*100=83.33
CMSInitiatingOccupancyFraction低于70% 需要调整xmn或SurvivorRatior值。
通过CMSInitiatingOccupancyFraction计算公式,计算得出value为73是,可以避免promotion faild问题,同时满足堆内存监控报警值在80%:内存大小128M*80%=102.4M 102.4M-36M=66.4M(老生代达到此值报警) 老生代达到67.15M(92M*0.73)将发生Full GC,所以在老生代大小达到66.4M时也就是WARN报警时将很有可能出现Full GC。
分享到:
相关推荐
- CMS参数:CMSInitiatingOccupancyFraction=90,确保公式(Xmx-Xmn)*(100-CMSInitiatingOccupancyFraction)/100>=Xmn成立,防止promotionfailed问题。 此外,SoftRefLRUPolicyMSPerMB参数用于软可达对象的存活时间...
4. **XX:PermSize与XX:MaxPermSize**:分别控制永久代(Permanent Generation)的初始大小与最大值。在Java 8及之后版本中,永久代被元空间(Metaspace)替代,这两个参数不再适用。 5. **XX:SurvivorRatio**:设置...
- `-Xmn` 参数用于设定年轻代的大小,如`-Xmn2g` 表示年轻代为2GB。年轻代通常占据堆内存的3/8,以优化垃圾收集效率。 - `-XX:PermSize` 和 `-XX:MaxPermSize` 用于设置持久代的初始值和最大值,不过在Java 8及更...
- `-Xmn`:设定年轻代的大小,推荐值为整个堆的3/8到4/8,这会影响Minor GC的频率和效率。 - `-XX:NewSize` 和 `-XX:MaxNewSize`:用于更精确地控制年轻代的初始和最大值。 - `-XX:CMSInitiatingOccupancyFraction`...
`CATALINA_OPTS='-server -Xmx6000m -Xms6000m -Xmn1024m -Xss256K -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+...
调整后的JVM参数为:-Xms4096m -Xmx4096m -Xmn2048m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSClassUnloadingEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX...
- `-Xmn` 设定年轻代(`Young Generation`)的大小,通常与应用中创建对象的生命周期相关。 - `-XX:PermSize` 和 `-XX:MaxPermSize` 分别设置永久代(`Permanent Generation`)的最小值和最大值,用于存储类元数据。在...
#### 一、Tomcat简介与安装 Apache Tomcat 是一款开源的Servlet容器,它实现了Servlet规范,同时也支持JSP规范。Tomcat因其简单易用且功能强大而广泛应用于中小型项目中。 **安装步骤:** 1. **下载Tomcat:** ...
- CMS有多个可调整的参数,如`-XX:CMSInitiatingOccupancyFraction`设置老年代达到多少百分比时触发CMS收集,`-XX:+UseCMSInitiatingOccupancyOnly`阻止CMS在启动时自动调整该值。 5. **其他参数**: - `-XX:+...
6. **-XX:MaxDirectMemorySize**:设置直接内存的最大值,默认与-Xmx参数值相同。 7. **-XX:+DisableExplicitGC**:禁止调用`System.gc()`,但JVM的垃圾回收机制仍然有效。 8. **-XX:SurvivorRatio**:设置新生代中...
它将这些数据区域的关系进行了可视化表示,有助于理解各个区域之间的交互与协作。 #### 三、垃圾收集算法与方式 ##### 1. 根搜索算法(CGROOT) 根搜索算法是垃圾收集的基础,主要由以下几种算法组成: - **标记-...
例如,`-Xms2048m -Xmx2048m`设置了JVM的最小和最大堆内存为2GB,`-Xmn512m`指定了新生代的大小为512MB,`-XX:MaxPermSize=256m`设定了永久代的最大值为256MB,而`-Xss128k`则表示每个线程的栈空间大小为128KB。...
继承是类与类之间的关系,聚合是对象与对象之间的关系。 11. NIO(New Input/Output)提供了非阻塞I/O操作,可以实现多路复用,提高服务器性能。 12. 反射可以通过Class.newInstance()、Constructor.newInstance()...
- 对于Jdk1.7,内存参数包括Xms、Xmx、Xmn等,同时调整了垃圾回收器设置,如UseParNewGC和UseConcMarkSweepGC,以及CMSInitiatingOccupancyFraction等。 - 对于Jdk1.8,使用G1垃圾收集器,设置了G1HeapRegionSize...
此外,还有一些其他的JVM参数可以用来调整垃圾收集的行为,如`-Xmn`用于设置年轻代的大小,`-XX:NewSize`和`-XX:MaxNewSize`设定年轻代的初始和最大值。`-XX:CMSInitiatingOccupancyFraction`是CMS垃圾收集器的参数...
对于CMS(Concurrent Mark Sweep)垃圾收集器,`XX:CMSInitiatingOccupancyFraction`参数设置触发CMS收集的年老代占用比例,比如设置为70%,意味着当年老代达到70%容量时开始CMS收集,以避免Full GC过于频繁。...
步骤1运行backend-service-demo nohup java -Xms3072m -Xmx3072m -Xmn1536m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -jar backend-service-demo-0.0.1-...