Процесс Java умирает "из пространства подкачки" во время основного GC, с большим количеством памяти, оставленной на машине - PullRequest
3 голосов
/ 22 июня 2011

Итак, я следил за процессом с помощью VisualVM и нажал «Perform GC», затем процесс остановился с ошибкой:

#
# A fatal error has been detected by the Java Runtime Environment:
#
# java.lang.OutOfMemoryError: requested 4088 bytes for char in /BUILD_AREA/jdk6_24/hotspot/src/share/vm/utilities/stack.inline.hpp. Out of swap space?
#
#  Internal Error (allocation.inline.hpp:39), pid=1148, tid=1082808672
#  Error: char in /BUILD_AREA/jdk6_24/hotspot/src/share/vm/utilities/stack.inline.hpp
#
# JRE version: 6.0_24-b07
# Java VM: Java HotSpot(TM) 64-Bit Server VM (19.1-b02 mixed mode linux-amd64 )
# An error report file with more information is saved as:
# /net/bsrs78.pit.twosigma.com/d-1/local/eaMemory2-yao-bsrs78.pit.twosigma.com-db8rsnyc9-head-20110622-130721-31729-0/hs_err_pid1148.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#

Но незадолго до этого я проверил машину и ееПохоже, что осталось достаточно памяти (цифры указаны в МБ):

free -m
             total       used       free     shared    buffers     cached
Mem:         96869      60999      35869          0        363       4590
-/+ buffers/cache:      56045      40823
Swap:        10243         40      10203

Мне кажется маловероятным, что GC займет всю память.

Это проблемапотому что, если я просто позволю программе продолжить работу, в какой-то момент она максимально выделит выделенную кучу, а затем попытается выполнить основной сборщик мусора и умереть таким же образом.Незначительный GC, кажется, хорошо, хотя.

Так что здесь происходит?Почему он умирает с сообщением подкачки пространства?Пожалуйста, дайте мне знать, если я могу что-то сделать, чтобы предоставить больше информации или диагностировать эту проблему дальше.Я буду очень признателен за любую помощь!

Спасибо!

Edit1: я загрузил журнал ошибок на http://www.mediafire.com/?kw0meup9mw5de9c, и для чего он стоит, он использует PS Scavenge для незначительного GCи PS MarkSweep для основного GC.

Edit2: Кроме того, эта проблема возникала несколько раз, постоянно умирая в середине крупной сборки мусора - будь то вызвано мной из-за VisualVM или из-за нехватки кучи и запускасамой JVM.

Ответы [ 3 ]

0 голосов
/ 09 июля 2011

Спасибо за всеобщее мнение. Оказывается, что система нашей компании установила ограничение (через ulimit) на объем виртуальной памяти процесса, который всего на ~ 1 ГБ превышает объем запрашиваемой кучи. Таким образом, процессу было отказано в большем объеме памяти, когда он превысил этот предел (очевидно, основной GC сработает), даже когда на машине было еще больше виртуальной памяти (сообщение «out of swap» вводит в заблуждение!). Увеличение лимита виртуальной памяти решило проблему.

0 голосов
/ 30 марта 2017

Вы можете видеть, что пространство подкачки исчерпано и происходит сбой из-за OOM (OutOfMemoryError) Эта проблема была решена в JDK-6302804 в 6u25 Обновление JVM могло бы избежать этой проблемы.

0 голосов
/ 23 июня 2011

Вы смотрели на этот вопрос / ответ ? Похоже, что это проблема конфигурации с ВМ.

Другой пример можно найти здесь . О той же самой ошибке сообщают и исправляют, уменьшая объем памяти, выделяемой виртуальной машине.

Я не могу загрузить ваш журнал ошибок, но я бы посоветовал попытаться уменьшить настройки памяти, чтобы посмотреть, поможет ли это.

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