java.lang.OutOfMemoryError: GC overhead limit exceeded原因及解决方法

简介: java.lang.OutOfMemoryError: GC overhead limit exceeded原因及解决方法

java.lang.OutOfMemoryError: GC overhead limit exceeded原因及解决方法



问题复现:11-23日生产推送数据时,发生该错误,没有其他操作.


解释STW:


vm在执行垃圾回收线程时,其他线程都会被迫停止,只有垃圾收集线程执行完毕,其他线程才会恢复,这期间会有很少的等待时间,这个过程就是stw。


错误含义:


该错误表示cpu在98%(默认值)的时间内都在处理jvm的垃圾收集(STW),且堆中回收到的内存仍是低于2%,这时系统就会报GC overhead limit exceeded。


错误分析:


两种情况导致这种情况


一:服务器内存过小,不能支撑jvm的运行

二:为堆设置的内存过小(-Xmx ,-Xms)


找出问题:


生产一台服务器,部署了8个java微服务应用,也就是可以看成8个jvm在运行,虽然相互之间不打扰,但是内存在平时就会占用过高,很容易就会OOM,-Xms512m -Xmx512m -Xss1024k -XX:ParallelGCThreads=2 -Djava.compiler=NONE,这个是jvm配置参数,解释下各个参数意思,-Xmx512m:堆最大使用内存为512M,-Xms512m:堆最小使用内存为512M,-Xss1024k:单个线程的栈空间为1M(虚拟机栈与本地方法栈共用),-XX:ParallelGCThreads=2:垃圾收集线程最大数为2,即使用2个并行线程进行垃圾回收, -Djava.compiler=NONE:这个是禁用JIT(即时编译器)编译器的命令,默认是启动的(禁用JIT,就会使用转译器,转译器更适合debug使用,JIT运行程序会更快)。


解决方案:


①让该错误消失:-XX:-UseGCOverheadLimit,jvm增加这个参数会让GC overhead limit exceeded该错误消失,只会出现Java heap space。这不是根本解决办法,只是不报该错误。因为GC overhead limit exceeded相当于Java heap space他的预警。


②优化堆参数配置:增加-Xmx 与-Xms 两个参数大小。


③增加服务器内存:如果不是内存泄漏可以使用这种情况,内存泄漏只增加内存,只是治标不治本。


相关文章
|
2月前
|
监控 Java Linux
Java 性能调优:调整 GC 线程以获得最佳结果
Java 性能调优:调整 GC 线程以获得最佳结果
82 11
|
2月前
|
Java
让星星⭐月亮告诉你,Java NIO之Buffer详解 属性capacity/position/limit/mark 方法put(X)/get()/flip()/compact()/clear()
这段代码演示了Java NIO中`ByteBuffer`的基本操作,包括分配、写入、翻转、读取、压缩和清空缓冲区。通过示例展示了`position`、`limit`和`mark`属性的变化过程,帮助理解缓冲区的工作原理。
33 2
|
3月前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
|
3月前
|
Oracle Java 关系型数据库
Java(TM) Platform SE binary 已停止工作”的解决方法
Java(TM) Platform SE binary 已停止工作”的解决方法
252 2
|
3月前
|
监控 算法 Java
深入理解Java中的垃圾回收机制(GC)
本文将探讨Java的自动内存管理核心——垃圾回收机制。通过详细解析标记-清除算法、复制算法和标记-整理算法等常用垃圾回收算法,以及CMS、G1等常见垃圾回收器,帮助读者更好地理解Java应用的性能优化和内存管理。同时,探讨分代收集、分区收集等策略在实际项目中的应用。结语部分总结了垃圾回收机制在Java开发中的重要性,并展望了未来可能的发展。
71 0
|
4月前
|
缓存 监控 Java
"Java垃圾回收太耗时?阿里HBase GC优化秘籍大公开,让你的应用性能飙升90%!"
【8月更文挑战第17天】阿里巴巴在HBase实践中成功将Java垃圾回收(GC)时间降低90%。通过选用G1垃圾回收器、精细调整JVM参数(如设置堆大小、目标停顿时间等)、优化代码减少内存分配(如使用对象池和缓存),并利用监控工具分析GC行为,有效缓解了高并发大数据场景下的性能瓶颈,极大提升了系统运行效率。
95 4
|
5月前
|
监控 算法 Java
Java面试题:如何在Java中触发一次Full GC?请详细解释垃圾回收机制和知识
Java面试题:如何在Java中触发一次Full GC?请详细解释垃圾回收机制和知识
400 4
|
人工智能 算法 Java
Java里面的GC(垃圾回收机制)
Java里面的GC(垃圾回收机制)
|
存储 算法 Java
大数据开发基础的编程语言的Java的JVM虚拟机的GC垃圾回收
Java虚拟机(JVM)是Java语言的核心,它是一个虚拟的计算机,可以在不同的操作系统上运行Java程序。在Java中,垃圾回收(GC)是JVM的重要组成部分,它负责回收无用的对象,从而释放内存资源。本文将介绍Java的GC垃圾回收和常见问题。
84 0
|
存储 监控 算法
JAVA GC垃圾回收机制详解
JAVA GC垃圾回收机制详解
270 0
JAVA GC垃圾回收机制详解