总结来说,目前有两个问题会自动触发系统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"
三、
相关推荐
线上系统频繁出现Full GC的现象通常表现为机器CPU负载过高和频繁的Full GC报警。Full GC是JVM中最耗时的操作,可能导致系统响应变慢甚至服务中断。其常见原因包括: 1. 对象频繁进入老年代,频繁触发Full GC。 2. 高...
3. 减少Full GC的发生频率,延长其周期,以减少对系统的影响。 在64位操作系统上,JVM理论上可以分配无限的内存,但在实际应用中,需要根据压力测试和线上运行情况合理分配内存。 垃圾在JVM中指的是没有被任何引用...
- **近期GC情况**:从历史GC日志来看,Old区的内存使用量呈现持续增长的趋势,而非正常的周期性增减。这表明随着时间的推移,内存泄露问题一直在恶化。 ##### 1.4 堆中对象概况 通过`jmap`命令获取堆中对象的信息...
高可用需要避免 Full GC 和 Region Server 的阻塞,确保数据的可靠性和安全性。 HBase 数据存储方式 HBase 的数据存储方式有多种,如 KV 存储、文档型存储和列式存储等。每种存储方式都有其特点和优点,如 KV 存储...
可以使用JConsole、VisualVM等工具查看GC日志,分析FGC(Full GC)频率。检查JVM参数设置,如堆大小、新生代与老年代的比例、垃圾收集器类型等。排查可能的原因,如内存泄漏、元空间满、显式调用`System.gc()`等。 ...
垃圾收集算法包括年轻代GC(Minor GC)和全GC(Full GC)。JDK 1.7的HashMap使用链表解决冲突,1.8引入红黑树提高查找效率。 ConcurrentHashMap是线程安全的HashMap实现,使用分段锁提高并发性能。 【Java基础语法...