Файл hs_err_pid.log не создан, а ядро ​​выгружено из jvm в Solaris

Описание проблемы

Через некоторое время после запуска моего серверного приложения Java я наблюдаю странное поведение виртуальной машины Oracle Java в Solaris. Обычно при сбое файла jvm hs_err_pid.log создается (местоположение определяется параметром jvm -XX: ErrorFile , как описано здесь: Как я могу подавить создание файла hs_err_pid?

Но в моем случае файл не был создан, остался только файл дампа ядра .

Использование pstack и pflags стандартные инструменты Solaris Мне удалось собрать дополнительную информацию о сбое (они включены ниже) из файла ядра .

Пробные решения

  • Пытался найти все ] hs_err_pid.log файлов в файловой системе, но ничего не удалось найти (даже за пределами рабочего каталога приложения). то есть:

    find / -name "hs_err_pid *"

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

  • Проблема выглядит примерно так: Java VM: воспроизводимый SIGSEGV как на 1.6.0_17, так и на 1.6 .0_18, как сообщить? но я все равно не могу это подтвердить, так как файл hs_err_pid.log отсутствует и, конечно, платформа ОС другая.
  • (РЕДАКТИРОВАТЬ) Как было предложено в одном из ответов на вопрос Инструмент для анализа дампа ядра Java , я извлек дамп кучи из файла ядра , используя jmap и проанализировал его с помощью Eclipse MAT. Я обнаружил утечку (элементы, добавленные в HashMap, которые не подлежат очистке, во время дампа ядра 1,4 M элементов). Однако это не объясняет, почему не был сгенерирован файл hs_err_pid.log , а также не произошло сбоя jvm.
  • (EDIT2) По предложению Дэррила Майлза, ограничения -Xmx были проверены (тест содержал код, который на неопределенное время добавлял объекты в LinkedList ):
    • java -Xmx1444m Результаты теста с java.lang.OutOfMemoryError: пространство кучи Java ,
    • java -Xmx2048m Результаты теста с java.lang.OutOfMemoryError: Java пространство кучи ,
    • java -Xmx3600m Результаты теста с дампом ядра.

Вопрос

Испытывал ли кто-нибудь подобную проблему с jvm и как действовать в таких случаях, чтобы узнать, что на самом деле произошло (т.е. в каком случае ядро ​​выгружается из jvm и нет hs_err_pid.log файл создан)?

Любой совет или указатель на решение этой проблемы были бы очень полезны.

Извлеченные флаги

# pflags core
...
/2139095:      flags = DETACH
    sigmask = 0xfffffeff,0x0000ffff  cursig = SIGSEGV

Извлеченный стек

# pstack core
...
-----------------  lwp# 2139095 / thread# 2139095  --------------------
 fb208c3e ???????? (f25daee0, f25daec8, 74233960, 776e3caa, 74233998, 776e64f0)
 fb20308d ???????? (0, 1, f25db030, f25daee0, f25daec8, 7423399c)
 fb20308d ???????? (0, 0, 50, f25da798, f25daec8, f25daec8)
 fb20308d ???????? (0, 0, 50, f25da798, 8561cbb8, f25da988)
 fb203403 ???????? (f25da988, 74233a48, 787edef5, 74233a74, 787ee8a0, 0)
 fb20308d ???????? (0, f25da988, 74233a78, 76e2facf, 74233aa0, 76e78f70)
 fb203569 ???????? (f25da9b0, 8b5b400, 8975278, 1f80, fecd6000, 1)
 fb200347 ???????? (74233af0, 74233d48, a, 76e2fae0, fb208f60, 74233c58)
 fe6f4b0b __1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_ (74233d44, 74233bc8, 74233c54, 8b5b400) + 1a3
 fe6f4db3 __1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_ (fe6f4968, 74233d44, 74233bc8, 74233c54, 8b5b4
00) + 27
 fe6f4deb __1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_ (74233d44, 8975278, 74233c54, 8b5b400) + 2f
 fe76826d __1cJJavaCallsMcall_virtual6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_ (74233d44, 897526c, fed2d464, fed2d6d0, 7
4233c54, 8b5b400) + c1
 fe76f4fa __1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_ (74233d44, 8975268, 897526c, fed2d464, fed2d6d0, 8b5b
400) + 7e
 fe7805f6 __1cMthread_entry6FpnKJavaThread_pnGThread__v_ (8b5b400, 8b5b400) + d2
 fe77cbe4 __1cKJavaThreadRthread_main_inner6M_v_ (8b5b400) + 4c
 fe77cb8e __1cKJavaThreadDrun6M_v_ (8b5b400) + 182
 feadbd59 java_start (8b5b400) + f9
 feed59a9 _thr_setup (745c5200) + 4e
 feed5c90 _lwp_start (745c5200, 0, 0, 74233ff8, feed5c90, 745c5200)

Системная информация:

# uname -a
SunOS xxxx 5.10 Generic_137138-09 i86pc i386 i86pc
# java -version
java version "1.6.0_11"
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Server VM (build 11.0-b16, mixed mode)
# ulimit -a
time(seconds) unlimited
file(blocks) unlimited
data(kbytes) unlimited
stack(kbytes) 10240
coredump(blocks) unlimited
nofiles(descriptors) 256
memory(kbytes) unlimited

Используемые аргументы jvm:

java -Xms1024M -Xmx2048M -verbose:gc -Xloggc:logs/gc.log -server com.example.MyApplication

Прокомментируйте, если вы обнаружите, что некоторая информация отсутствует, я попытаюсь добавить их.

6
задан Community 23 May 2017 в 12:23
поделиться