总结来说,目前有两个问题会自动触发系统fullgc.
一: tomcat6.0.35的server.xml配置的
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
会触发1小时一次fullgc.
Class<?> clazz = Class.forName("sun.misc.GC");
Method method = clazz.getDeclaredMethod( "requestLatency", new Class[] {long.class});
method.invoke(null, Long.valueOf(3600000)); # 一个小时3万六千秒 #反射方式调了一把
tomcat6.0.43以后fix了这个问题。
tomcat7高版本【 现在线上镜像tomcat7.0.61】 也不会有这个问题。
二: cxf-common-utilities-2.5.2-sources.jar的 org.apache.cxf.common.logging.JDKBugHacks
代码和上面差不多,
默认也会触发一小时fullgc一次.
对于性能要求高的高并发的系统,一小时一次fullgc,会周期性影响性能。
1建议升级tomcat到7以上
2 如果一定要用cxf的话,升级cxf到2.8.0,并且在jvm启动参数添加,- Dorg.apache.cxf.JDKBugHacks.gcRequestLatency=true
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
=========
二、
ODC的
export JAVA_OPTS="-Djava.library.path=/usr/local/lib -server -Xms6G -Xmx6G -XX:MaxMetaspaceSize=1024m -XX:+UseConcMarkSweepGC -XX:ParallelGCThreads=8 -XX:+UseParNewGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=50 -XX:+UnlockDiagnosticVMOptions -XX:-UseBiasedLocking -XX:-UseCounterDecay -XX:AutoBoxCacheMax=20000 -XX:+ParallelRefProcEnabled -XX:+ExplicitGCInvokesConcurrent -XX:+CMSParallelRemarkEnabled -XX:ParGCCardsPerStrideChunk=4096 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$CATALINA_HOME/logs/ -Djava.awt.headless=true -Dsun.net.client.defaultConnectTimeout=60000 -Dsun.net.client.defaultReadTimeout=60000 -Djmagick.systemclassloader=no -Dnetworkaddress.cache.ttl=300 -Dsun.net.inetaddr.ttl=300"
ioms的
export JAVA_OPTS="-Djava.library.path=/usr/local/lib -server -Xms6144m -Xmx6144m -XX:MaxMetaspaceSize=256m -XX:NewRatio=2 -XX:ParallelGCThreads=8 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=60 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=3 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/Logs -Djava.awt.headless=true -Dsun.net.client.defaultConnectTimeout=60000 -Dsun.net.client.defaultReadTimeout=60000 -Djmagick.systemclassloader=no -Dnetworkaddress.cache.ttl=300 -Dsun.net.inetaddr.ttl=300"
三、
相关推荐
《GCViewer:全面解析Java程序Full GC分析工具》 在Java世界中,垃圾收集(Garbage Collection, GC)是管理内存的重要机制。然而,当GC运行频繁或出现长时间的Full GC时,可能会导致应用程序性能下降,甚至出现暂停...
AviatorEvaluator执行脚本导致Metaspace不足引发频繁 Full GC故障机经过 故障机经过 数据分析&特征平台DMP 最近频繁发生Full GC, 引发集群卡顿,导致经常超时,按照常规的方法,肯定是先看GC 日志 2020-02-17T10:17:...
首先,我们关注"元空间不足导致频繁FullGC.pdf"这个文件。元空间是Java 8引入的新特性,取代了之前的永久代(Permanent Generation)。元空间主要存储类的元数据,如类信息、方法信息、字段信息等。当元空间满时,...
《JVM Full GC 之 MAT 工具分析实践》 在Java开发中,理解JVM内存管理和垃圾收集机制至关重要,因为这直接关系到应用程序的性能和稳定性。当遇到内存溢出(OutOfMemoryError)、系统异常或者性能下降等问题时,我们...
full GC 问题排查过程 在 Java 应用程序中,Full GC 是一种非常 Costly 的垃圾回收操作,它将停止世界(Stop the World)并对整个堆进行垃圾回收。因此,出现 Full GC 问题时,需要快速定位问题原因以避免对系统...
4. 避免大量短生命周期的大对象:这类对象容易导致新生代快速填满,触发频繁的Minor GC,进而可能触发Full GC。 5. 限制System.gc()的调用:避免在代码中显式调用,让JVM自动管理GC。 6. 优化持久代大小:对于CMS和...
Java Full GC 触发情况实例解析 Java Full GC 触发情况实例解析主要介绍了 Java full gc 触发情况实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...
12. **代码优化**:减少不必要的对象创建,及时释放不再使用的对象引用,避免大量短生命周期对象进入老年代,都可以减少Full GC的压力。 13. **类加载机制**:理解类加载的双亲委派模型,避免类的不必要加载,可以...
线上系统频繁出现Full GC的现象通常表现为机器CPU负载过高和频繁的Full GC报警。Full GC是JVM中最耗时的操作,可能导致系统响应变慢甚至服务中断。其常见原因包括: 1. 对象频繁进入老年代,频繁触发Full GC。 2. 高...
当准备要触发一次Young GC时,如果发现统计数据说之前Young GC的平均晋升大小比目前老年代剩余的空间大,则不会触发Young GC而是转为触发Full GC。(通常情况) 如果有永久代的话,在永久代需要分配空间但已经没有...
JVM的内容分享,包含JVM的优化目标、优化原则、JVM组成、内存区域划分、垃圾回收算法、垃圾回收器、FullGC触发时机、对象布局、元空间存储、GC调优
3. 减少Full GC的发生频率,延长其周期,以减少对系统的影响。 在64位操作系统上,JVM理论上可以分配无限的内存,但在实际应用中,需要根据压力测试和线上运行情况合理分配内存。 垃圾在JVM中指的是没有被任何引用...
4. **垃圾收集阶段**:当老年代空间不足时,会触发Major GC(老年代垃圾收集),也称为Full GC。Full GC会清理整个堆内存,包括年轻代和老年代,以及持久代(在Java 8以前,用来存储静态变量和常量的部分)。这个...
5. **GC消耗的时间**:GC操作所占用的总时间,这包括了所有类型GC(Young和Full)的时间。 6. **GC时间的百分比**:GC时间占JVM总运行时间的比例,可用于评估GC对整体性能的影响。 7. **平均消耗时间**:每次GC...
2 性能分析步骤 211 确定应用类型 ...410 CMS 回收是否等于 FULL GC? 411 判断 FULL GC 是否正常的标准 412 FULL GC 出现的几种情况 413 CMS 常用参数 414 堆内存溢出后处理方案。 5 瓶颈分析总结及案例
- **频繁的GC事件**:GC日志显示频繁的full GC或年轻代GC。 - **内存使用率持续升高**:监控工具显示内存使用率不断上升且无法释放。 这些问题的根源可能在于不合理的数据结构设计、未关闭的资源、循环引用等。 ##...
开发者需要关注对象的生命周期,合理分配内存,避免大对象的频繁创建,以及减少不必要的Full GC调用,从而提高应用程序的运行效率。同时,调整JVM的垃圾回收参数(如XX:NewRatio, XX:SurvivorRatio等)也可以帮助...
在日志中,64.546秒时发生了Full GC,新生代使用0字节,老年代从457MB减少到392MB,整个堆从473MB减少到392MB,这次Full GC耗时1.34秒,CPU时间用了4.44秒,使用了4个线程。 通过观察GC日志,我们可以了解...