首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

GC overhead limit exceeded 问题分析与解决

今天出现了一个很奇怪的异常:java.lang.OutOfMemoryError: GC overhead limit exceeded ,超出GC开销限制。...是发生在GC占用大量时间为释放很小空间的时候发生的,是一种保护机制。一般是因为堆太小,导致异常的原因:没有足够的内存。...Sun 官方对此的定义:超过98%的时间用来做GC并且回收了不到2%的堆内存时会抛出此异常。 为什么会出现这个问题呢?经过反复测试发现,下载数据时文件大小超过某一峰值是会报这个错误。...2,JVM给出这样一个参数:-XX:-UseGCOverheadLimit 禁用这个检查,其实这个参数解决不了内存问题,只是把错误的信息延后,替换成 java.lang.OutOfMemoryError

4.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

去公司的第一天老大问我:内存泄露检测工具你知道几个?

线程线程名中出现异常:Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded 超出GC限制 原因:详细消息“GC overhead limit exceeded...这个 java.lang.OutOfMemoryError可以使用命令行标志-XX:-usegcoveredlimit关闭超出GC开销限制的异常。...线程线程名中出现异常:Java.Lang.OutOfMemoryError:请求的数组大小超过VM限制 原因:详细信息“请求的数组大小超过VM限制”表示应用程序(或该应用程序使用的API)试图分配大于堆大小的数组...可用于类元数据的元空间量受参数MaxMetaSpaceSize的限制,该参数在命令行中指定。...例如 -XX:CompressedClassSpaceSize=4g,超出可接受的界限将导致以下消息: CompressedClassSpaceSize of 4294967296 is invalid

30820

Java 内存溢出(OOM)异常完全指南

垃圾收集器怎样检测内存中的某些空间不再使用已经超出本文的范围,但你只需要相信 GC 可以做好这些工作即可。...默认情况下,当应用程序花费超过 98% 的时间用来做 GC 并且回收了不到 2% 的堆内存时,会抛出java.lang.OutOfMemoryError: GC overhead limit exceeded...默认超过 98% 的时间用来做 GC 却回收了不到 2% 的内存时将会抛出此错误。那如果没有此限制会发生什么呢?...还有一点需要注意,这些工具在 Java 运行时有显著的开销,因此不建议在生产环境中使用。...默认情况下,对于 64 位服务器端 JVM,MetaspaceSize默认大小是 21M(初始限制值),一旦达到这个限制值,Full GC 将被触发进行类卸载,并且这个限制值将会被重置,新的限制值依赖于

3.9K13

你知道 OOM 常见原因吗?有什么好的解决方法?

超出预期的访问量/数据量,通常是上游系统请求流量飙升,常见于各类促销/秒杀活动,可以结合业务流量指标排查是否有尖状峰值。 过度使用终结器(Finalizer),该对象没有立即被 GC。...GC overhead limit exceeded 当 Java 进程花费 98% 以上的时间执行 GC,但只恢复了不到 2% 的内存,且该动作连续重复了 5 次,就会抛出 java.lang.OutOfMemoryError...如果上述方法无法解决,可以通过 jmap 命令 dump 内存对象 jmap -dump:format=b,file=dump.hprof ,然后利用 Eclipse MAT 功能逐一分析开销最大的...:执行 ulimia -a 查看最大线程数限制,使用 ulimit -u xxx 调整最大线程数限制。...原因分析 Direct ByteBuffer 的默认大小为 64 MB,一旦使用超出限制,就会抛出 Direct buffer memory 错误。

1.6K20

高手总结的9种 OOM 常见原因及解决方案

2、超出预期的访问量/数据量,通常是上游系统请求流量飙升,常见于各类促销/秒杀活动,可以结合业务流量指标排查是否有尖状峰值。 3、过度使用终结器(Finalizer),该对象没有立即被 GC。...2、GC overhead limit exceeded 当 Java 进程花费 98% 以上的时间执行 GC,但只恢复了不到 2% 的内存,且该动作连续重复了 5 次,就会抛出 java.lang.OutOfMemoryError...:GC overhead limit exceeded 错误。...jmap-dump:format=b,file=dump.hprof ,然后利用 Eclipse MAT https://www.eclipse.org/mat 功能逐一分析开销最大的...原因分析 Direct ByteBuffer 的默认大小为 64 MB,一旦使用超出限制,就会抛出 Directbuffer memory 错误。

3.4K31

OutOfMemory及其解决方法「建议收藏」

如果web app用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小,超出了也会导致这块内存的占用过多造成溢出,或者tomcat热部署时侯不会清理前面加载的环境,只会将...根据GC的机制,程序的运行会引起系统运行环境的变化,增加GC的触发机会。 为了避免这些问题,程序的设计和编写就应避免垃圾对象的内存占用和GC开销。...默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。...以上的处理器就不会有限制了 提示:注意:如果Xms超过了Xmx值,或者堆最大值和非堆最大值的总和超过了物理内存或者操作系统的最大限制都会引起服务器启动不起来。...去回收,程序内过多的出现这样的情况就会报上面的那个错误,建议在使用字符串时能使用StringBuffer就不要用String,这样可以省不少开销; 3、尽量少用静态变量,因为静态变量是全局的,GC不会回收的

7K10

高手总结的9种 OOM 常见原因及解决方案

2、超出预期的访问量/数据量,通常是上游系统请求流量飙升,常见于各类促销/秒杀活动,可以结合业务流量指标排查是否有尖状峰值。 3、过度使用终结器(Finalizer),该对象没有立即被 GC。...2、GC overhead limit exceeded 当 Java 进程花费 98% 以上的时间执行 GC,但只恢复了不到 2% 的内存,且该动作连续重复了 5 次,就会抛出 java.lang.OutOfMemoryError...:GC overhead limit exceeded 错误。...jmap-dump:format=b,file=dump.hprof ,然后利用 Eclipse MAT https://www.eclipse.org/mat 功能逐一分析开销最大的...原因分析 Direct ByteBuffer 的默认大小为 64 MB,一旦使用超出限制,就会抛出 Directbuffer memory 错误。

1.7K30

教你分析9种 OOM 常见原因及解决方案

2、超出预期的访问量/数据量,通常是上游系统请求流量飙升,常见于各类促销/秒杀活动,可以结合业务流量指标排查是否有尖状峰值。 3、过度使用终结器(Finalizer),该对象没有立即被 GC。...2、GC overhead limit exceeded 当 Java 进程花费 98% 以上的时间执行 GC,但只恢复了不到 2% 的内存,且该动作连续重复了 5 次,就会抛出 java.lang.OutOfMemoryError...:GC overhead limit exceeded 错误。...jmap-dump:format=b,file=dump.hprof ,然后利用 Eclipse MAT https://www.eclipse.org/mat 功能逐一分析开销最大的...原因分析 Direct ByteBuffer 的默认大小为 64 MB,一旦使用超出限制,就会抛出 Directbuffer memory 错误。

12.7K71

Java内存问题分析与定位

GC异常分析与定位 现象: 业务偶尔出现超时现象 cpu负载很高 分析与解决: 超时或负载高很可能是GC异常表象,此时需要查看GC日志,结合实际业务,分析GC行为,找到GC异常根因。...Metaspace本身没有限制,如果设置了MaxMetaspaceSize,则受限这个配置。 3.如果内存持续增长超出业务实际可能使用的内存量,则可能存在内存泄漏。 内存泄漏位置判断 1....通过异常日志提示, eg, Java.lang.OutOfMemoryError: Java heap space, Java.lang.OutOfMemoryError: metadata space..., Java.lang.OutOfMemoryError: Direct buffer space, 2....JNI申请的native内存本身已超出JVM控制范围,没办法用JVM工具排查。 借助操作系统工具pmap排查,可查看进程内存映射,查找可疑内存。 案例分析 例一.

76110

一次OutOfMemoryError: GC overhead limit exceeded

现象: 由于需要将mysql表中的过期数据在凌晨定时读取出过滤后转入到MongoDB,一个转换SQL达到百行,而且有几十个,集中运行后程序反馈异常: Handler dispatch failed; nested...exception is java.lang.OutOfMemoryError: GC overhead limit exceeded Heap内存:1.5G,程序在Docker容器限制使用内存2G。...java.lang.OutOfMemoryError: GC overhead limit exceeded 这种情况发生的原因是程序基本上耗尽了所有的可用内存, GC 也清理不了。...网友的解决建议: 有的人在解决 “java.lang.OutOfMemoryError: GC overhead limit exceeded” 错误时,配置了下面的启动参数: // 不推荐 -XX:-...指定这个选项,会将原来的 java.lang.OutOfMemoryError: GC overhead limit exceeded 错误掩盖,变成更常见的 java.lang.OutOfMemoryError

3.7K30

troubleshoot之:分析OutOfMemoryError异常

在极少数情况下,如果花费大量时间进行垃圾回收并且只释放了很少的内存,也有可能引发java.lang.OutOfMemoryError。...java.lang.OutOfMemoryError: GC Overhead limit exceeded GC overhead limit exceeded表示的是GC一直都在运行,从而导致java...如果一个java程序98%的时间都在做GC操作,但是只恢复了2%的heap空间,并且持续5次。那么java.lang.OutOfMemoryError将会被抛出。 可以使用下面的参数来关闭这个功能。...java.lang.OutOfMemoryError: Metaspace 从JDK8之后,Metaspace已经移到了java的本地内存空间中。...如果Metaspace超出限制的大小,那么java.lang.OutOfMemoryError也会抛出。 Metaspace的空间大小可以通过MaxMetaSpaceSize来设置。

29210

spark出现GC overhead limit exceeded和java heap space

spark执行任务时出现java.lang.OutOfMemoryError: GC overhead limit exceeded和java.lang.OutOfMemoryError: java...heap space 最直接的解决方式就是在spark-env.sh中将下面两个参数调节的尽量大     export SPARK_EXECUTOR_MEMORY=6000M     export SPARK_DRIVER_MEMORY...总结一下Spark中各个角色的JVM参数设置:     (1)Driver的JVM参数:     -Xmx,-Xms,如果是yarn- client模式,则默认读取spark-env文件中的SPARK_DRIVER_MEMORY...GC 方式,如果是yarn-client模式,默认读取的是spark-class文件中的JAVA_OPTS;如果是yarn-cluster模式,则读取 的是spark-default.conf文件中的spark.driver.extraJavaOptions...GC方式,两种模式都是读取的是spark-default.conf文件中的spark.executor.extraJavaOptions对应的JVM参数值。

4.5K90

Spark-submit 参数调优完整攻略

此外,如果发现作业由于频繁的gc导致运行缓慢(通过spark web ui可以观察到作业的gc耗时),意味着task执行用户代码的内存不够用,那么同样建议调低这个参数的值。...shuffle操作在进行聚合时,如果发现使用的内存超出了这个20%的限制,那么多余的数据就会溢写到磁盘文件中去,此时就会极大地降低性能。...个人不太建议调该参数 --conf spark.sql.codegen 默认值为false,当它设置为true时,Spark SQL会把每条查询的语句在运行时编译为java的二进制代码。...,codegen就可能增加额外的开销(将查询语句编译为java二进制文件)。...--conf spark.sql.parquet.compressed.codec 默认值为snappy 这个参数代表使用哪种压缩编码器。

2.8K20

被开发者抛弃的 Executors,错在哪儿?

它们的问题在于等待队列使用了 LinkedBlockingQueue 这个以链表实现的无界队列(最大长度是 Integer.MAX_VALUE),最终导致堆积了大量等待处理的任务,从而导致频繁的 GC,...java.lang.OutOfMemoryError: GC overhead limit exceeded 再来看看 CachedThreadPool 出现 OOM 的原因。...java.lang.OutOfMemoryError: pthread_creat (1040KB stack) failed: Try again ScheduledThreadPool 的等待队列使用的是...线程是一种系统资源,本身创建就会带来内存开销,同时操作系统对单进程可创建的线程数也是有限制的。...同时系统本身也会对每个进程可创建的线程数,做一定的限制,这个限制在 /proc/pid/limits 中,不同的厂商对这个限制也有所不同,当超出限制时,哪怕堆上还有可用内存,依然会抛出 OOM。

1K20

撩改JVM常见调优参数

5.5 引用队列 软引用,弱引用,虚引用被GC以后不会立即消失,而是添加到了ReferenceQueue引用队列中,可以做后续的操作。 「案例演示」 ? ? 可以看到在GC以后引用队列中有值了 6....6.2 堆溢出 java.lang.OutOfMemoryError:Java heap space堆溢出。 「常见的场景:大对象(直接超过老年区大小);强引用对象的不断出现」 ?...6.3 GC超出资源限制 java.lang.OutOfMemoryError:overhead limit exceededGC占据了系统98%的运行,但是仅仅回收了2%不到的内存空间。...导致重复GC,但空间没法释放。爆出这个错误 ?...6.5 不能够再创建本地线程 java.lang.OutOfMemoryError:unable to create new native thread 默认大小为1024个 6.6 元空间溢出 java.lang.OutOfMemoryError

88710

Spark 出现的问题及其解决方案

reduce端拉取数据的缓冲区减小,不容易导致OOM,但是相应的,reudce端的拉取次数增加,造成更多的网络传输开销,造成性能的下降。 注意,要保证任务能够运行,再考虑性能的优化。 2....JVM GC导致的shuffle文件拉取失败 在Spark作业中,有时会出现shuffle file not found的错误,这是非常常见的一个报错,有时出现这种错误以后,选择重新执行一遍,就不再报出这种错误...出现上述问题可能的原因是Shuffle操作中,后面stage的task想要去上一个stage的task``所在的Executor拉取数据,结果对方正在执行GC,执行GC会导致Executor内所有的工作现场全部停止...JVM栈内存溢出基本上就是由于调用的方法层级过多,产生了大量的,非常深的,超出了 JVM 栈深度限制的递归。...sql语句来执行,每条sql语句尽量保证100个以内的子句。

96720

Spark DataFrame简介(一)

DataFrame 本片将介绍Spark RDD的限制以及DataFrame(DF)如何克服这些限制,从如何创建DataFrame,到DF的各种特性,以及如何优化执行计划。...最后还会介绍DF有哪些限制。 ? 2. 什么是 Spark SQL DataFrame? 从Spark1.3.0版本开始,DF开始被定义为指定到列的数据集(Dataset)。...除此之外,没有垃圾回收(GC开销。还避免了昂贵的Java序列化。因为数据是以二进制格式存储的,并且内存的schema是已知的。 b.优化执行计划:这也称为查询优化器。...Spark SQL能对多种数据源使用DataFrame接口。使用SparkSQL DataFrame 可以创建临时视图,然后我们可以在视图上运行sql查询。 6....总结 综上,DataFrame API能够提高spark的性能和扩展性。避免了构造每行在dataset中的对象,造成GC的代价。不同于RDD API,能构建关系型查询计划。

1.7K20

后浪,谈谈你对jvm性能调优的理解

压缩算法:性能开销大 c....java.lang.OutOfMemoryError: Requested array size exceeds VM limit 这个异常很容易理解,请求分配的数组大小超过jvm限制,出现这种情况的原因有...我们知道jvm分配的最大内存由Xmx等一些参数指定,如果jvm需要的总内存超出了宿主机可以分配的最大的物理内存,就会用到swap space,如果swap space不足,jvm内存分配就会失败,从而抛出这个异常...参数sys.kernel.pid_max限制,这个参数只是每创建一个线程,都需要分配一个pid,当pid的值大于这个值时,就会创建失败。...JVM常用调优参数 堆空间设置: -Xmx4g 进程占用的最大堆空间大小,超出后会OOM -Xms2g 初始化堆空间大小 -Xmn1g 年轻代大小,官方推荐配置为整个堆的3/8 -XX:NewRatio

63310
领券