我有一个spark应用程序,它遇到了OutOfMemory Error.The GC日志如下。有没有一种方法可以告诉我请求了多少内存,以及在请求时有多少内存可用?谢谢!
3429.458: [Full GC (Allocation Failure) [PSYoungGen: 3495918K->3495908K(6990848K)] [ParOldGen: 2096
9872K->20969870K(20971520K)] 24465790K->24465778K(27962368K), [Metaspace: 56727K->56723K(1101824K)]
, 0.4597426 secs] [Times: user=0.90 sys=0.01, real=0.46 secs]
#
# java.lang.OutOfMemoryError: Java heap space
# -XX:OnOutOfMemoryError="kill %p"
# Executing /bin/sh -c "kill 16095"...
os::fork_and_exec failed: Cannot allocate memory (12)
3429.990: [Full GC (Ergonomics) [PSYoungGen: 3495936K->3495906K(6990848K)] [ParOldGen: 20969937K->20969933K(20971520K)] 24465873K->24465840K(27962368K), [Metaspace: 56723K->56723K(1101824K)], 5.4942216 secs] [Times: user=34.79 sys=0.58, real=5.50 secs]
3435.485: [Full GC (Ergonomics) [PSYoungGen: 3495936K->3495907K(6990848K)] [ParOldGen: 20969933K->20969933K(20971520K)] 24465869K->24465840K(27962368K), [Metaspace: 56723K->56723K(1101824K)], 2.3213689 secs] [Times: user=14.01 sys=0.22, real=2.32 secs]
3437.823: [Full GC (Ergonomics) [PSYoungGen: 3495936K->3495908K(6990848K)] [ParOldGen: 20970002K->20969998K(20971520K)] 24465938K->24465907K(27962368K), [Metaspace: 56723K->56723K(1101824K)], 0.4090566 secs] [Times: user=0.83 sys=0.01, real=0.40 secs] 发布于 2019-03-09 12:09:32
有没有一种方法可以告诉我请求了多少内存
而不是根据所提供的信息。可能一点也不会。
和请求时有多少内存可用?
根据GC日志,这是内存耗尽的时候:
3429.458: [Full GC (Allocation Failure)
[PSYoungGen: 3495918K->3495908K(6990848K)]
[ParOldGen: 20969872K->20969870K(20971520K)]
24465790K->24465778K(27962368K),
[Metaspace: 56727K->56723K(1101824K)], 0.4597426 secs]
[Times: user=0.90 sys=0.01, real=0.46 secs] 这行24465790K->24465778K(27962368K)代码是这样说的:
GC 24465790K
所以看起来3496590K是27962368K中的免费版本。
(其他三元组可以以相同的方式读取...)
看起来老一辈人已经满员了。我怀疑GC失败是由于GC无法保留eden空间中的对象。还要注意的是,无论是年轻一代的收集器还是老一代的收集器都没有设法释放太多的内存,完整的GC也没有。
因此,总体诊断是您的堆已满。由于某种原因,分配器无法将新对象放入伊甸园空间。它可能比eden中的可用空间大,也可能比大对象阈值大。
https://stackoverflow.com/questions/55073749
复制相似问题