Пространство кучи OutOfMemoryError: доступно против запрошенного - PullRequest
1 голос
/ 09 марта 2019

У меня есть приложение spark, которое столкнулось с ошибкой OutOfMemory. Журнал 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] 

1 Ответ

1 голос
/ 09 марта 2019

Есть ли способ узнать, сколько памяти было запрошено

Не по предоставленной информации.Возможно, совсем нет.

и сколько памяти было доступно во время запроса?

Согласно журналу 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
  • пробел, использованный после GC 24465778K
  • пробел кучипосле GC 27962368K

Похоже, что 3496590K свободен из 27962368K.

(Другие тройки могут быть прочитаны таким же образом ...)

ItПохоже, старое поколение полно.Я подозреваю, что сбой GC вызван тем, что GC не может владеть объектами из пространства eden из-за этого.Также обратите внимание, что ни молодому, ни старому поколению не удалось освободить много памяти, как и Full GC.

Таким образом, общий диагноз состоит в том, что ваша куча заполнена.По какой-то причине распределитель не смог поместить новый объект в пространство eden.Возможно, он больше, чем доступное свободное пространство в eden, или может быть больше, чем порог большого объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...