首页 > 其他分享 >024、JVM实战总结:动手实验:线上部署系统时,如何设置垃圾回收相关参数?

024、JVM实战总结:动手实验:线上部署系统时,如何设置垃圾回收相关参数?

时间:2022-12-29 17:05:35浏览次数:42  
标签:并发 对象 回收 024 线程 线上 JVM CMS 垃圾


 

1、前文回顾

CMS采用了4个阶段来垃圾回收:初始标记(STW)、并发标记、重新标记(STW)、并发清理

2、并发回收垃圾导致CPU资源紧张

        并发标记和并发清理两个最耗时的阶段,垃圾回收线程和系统工作线程同时工作,会导致有限的CPU资源被垃圾回收线程占用了一部分。

        并发标记:对GC Roots进行深度追踪,但老年代的存活对象比较多,导致会追踪大量对象,耗时较高

        并发清理:垃圾对象从各种随机的内存位置清理掉,也是比较耗时的

        CMS默认启动的垃圾回收线程的数量是(CPU核数 + 3)/ 4

    3、Concurrent Mode Failure问题

CMS只不过是回收之前标记好的垃圾对象,但在清理的过程中存在新加入老年代的垃圾对象(大对象或晋升过来的对象),这种垃圾对象是‘浮动垃圾’,需要下次FullGC来清理。

-XX:CMSInitiatingOccupancyFaction 参数可以用来设置老年代占用多少比例的时候触发CMS垃圾回收

CMS垃圾回收期间,系统程序要放入老年代的对象大于了可用内存空间,此时会如何?会发生Concurrent Mode Failure,此时就会自动用“Serial Old”垃圾回收器替代CMS,强行把系统程序STW,重新进行长时间的GC Roots追踪,然后一次性把垃圾对象都回收掉,完事儿了再恢复系统线程

4、内存碎片问题

        CMS采用“标记-清理算法,会产生内存碎片问题。内存碎片会导致更加频繁的FullGC,CMS垃圾收集器 -XX:+UseCMSCompactAtFullCollection 参数默认是打开的,意思是:FullGC后,STW 然后进行碎片整理。

-XX:CMSFullGCsBeforeCompaction,意思是执行多少次Full GC之后再执行一次内存碎片整理的工作。默认值是0 (每次FullGC都进行内存整理)

 


标签:并发,对象,回收,024,线程,线上,JVM,CMS,垃圾
From: https://blog.51cto.com/u_14724733/5978509

相关文章

  • 036、JVM实战总结:糟糕!运行着的线上系统突然卡死无法访问,万恶的JVM GC!
    提醒大家复习时,只看标题进行回想并尝试回答,然后再看内容。1、前文回顾前5周分析了JVM核心原理、出现GC的问题情形。2、基于JVM运行的系统最怕什么?STW 造成的卡顿问题3、年......
  • 记录一次线上慢sql查询问题
        昨天晚上上线后,发现在app查询功能时候,整个系统直接爆出大量的慢sql报警。紧急回滚后查找问题,然后执行sql的执行计划:      发现有一个全表扫描的问......
  • P1024 [NOI2001] 食物链【种类并查集】
    题意P1024简化题意:给定\(n\)和\(k(n\leqslant5\times10^4,k\leqslant10^5)\),表示有\(n\)个动物,\(k\)个描述,其中:\(n\)个动物分别属于\(A,B,C\)中的一种,定义......
  • 关于jvm的记录
    一、JVM体系结构:类装载器ClassLoader:用来装载.class文件执行引擎:执行字节码,或者执行本地方法运行时数据区:方法区、堆、Java栈、程序计数器、本地方法栈J......
  • JVM 内存模型 Stack Heap 文章选摘
    JVM内存模型Java虚拟机(JavaVirtualMachine=JVM)的内存空间分为五个部分,分别是:程序计数器Java虚拟机栈本地方法栈堆方法区。下面对这五个区域展开深入的介绍。程序......
  • 1024 我敢送,你敢参与吗?
    喜迎1024大家好,一年一度的1024程序员节,又双叒叕来啦!在这喜大普奔的日子里,祝愿所有的程序员猿媛节日快乐!1024咱们能不能不不不加班~好啦,无需太多前奏,直奔主题。为了感谢......
  • JVM调优总结 -Xms -Xmx -Xmn -Xss
     java启动参数共分为三类;其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足......
  • JVM内存溢出深度分析
    今天,发现游戏逻辑服务器内存溢出问题,每隔一定时间就生成java_pidxxxxxx.hprof,基本1G内存分配不够用了,导致FGC频繁发生。工具:MAT ​​EclipseMemoryAnalyzerTool(MAT)分......
  • JDK8引进的JVM参数变化记录
    1.PermGen空间​​被移除了,取而代之的是Metaspace​​需要做的调整为-XX:PermSize=64m-XX:MaxPermSize=128m变成 -XX:MetaspaceSize=64m-XX:MaxMetaspaceSize=128m否则......
  • JVM日志分析及工具
    JVM的GC日志的主要参数包括如下几个:-XX:+PrintGC输出GC日志-XX:+PrintGCDetails输出GC的详细日志-XX:+PrintGCTimeStamps输出GC的时间戳(以基准时间的形式)-XX:+Print......