Неверный доступ к красной зоне стека из Java VM
Я пытаюсь выяснить, что может вызвать эту ошибку в Java:
Invalid access of stack red zone 0x115ee0ed0 rip=0x114973900
Кто-нибудь когда-нибудь сталкивался с этим сообщением об ошибке? Это буквально убивает JVM, и все на этом останавливается.
В настоящее время я использую эту версию Java:(на OS X 10.6)
java version "1.6.0_15"
Java(TM) SE Runtime Environment (build 1.6.0_15-b03-219)
Java HotSpot(TM) 64-Bit Server VM (build 14.1-b02-90, mixed mode)
Все, что я ищу, - это какое-то объяснение и советы о том, как избежать этого снова.
Заранее спасибо!
4 ответа
Не глядя на ваш код, трудно сказать, что является причиной ошибки, но здесь есть объяснение красной зоны, а также несколько ссылок, которые обсуждают проблему.
Каждый блок памяти, выделенный приложению, имеет начальную и конечную "красную зону", которая является специальной сигнатурой в памяти непосредственно перед и сразу после памяти, выделенной для приложения. Если приложение будет перезаписано за пределами этого региона, подпись красной зоны будет перезаписана. Затем в дальнейшем происходит сбой приложения, и вы получаете это завершение, когда память возвращается, и ОС может проверять красные зоны.
Эта проблема была обнаружена в Mac OSX, поэтому это может быть что-то, связанное с проблемами загрузчика классов, когда класс не найден, но в Mac OSX он был зарегистрирован как доступ к красной зоне. Так что попробуйте с JDK 1.5 и посмотрите, сможете ли вы воспроизвести проблему.
http://osdir.com/ml/java.objectweb.asm/2007-07/msg00004.html
Я нашел ту же ошибку на OSX сегодня. Отследил это до того, что составило stackOverlfow в entitybean
Как уже упоминалось, это похоже на переполнение стелс-стека. Увеличьте параметр JVM размера стека (-Xss). В моем случае переход от -Xss128k к -Xss1024k добился цели.
В случае, если это полезно для кого-либо еще. Я столкнулся с этой ошибкой, потому что, если плохая строка передана JSONArray.fromObject(jsonString);
Я работаю: Java версия "1.6.0_29" Java(TM) SE Runtime Environment (сборка 1.6.0_29-b11-402-10M3527) Java HotSpot(TM) 64-битная виртуальная машина сервера (сборка 20.4-b02-402, смешанный режим) OSX 10.6.8
В самом начале у jsonString было нулевое значение, и ошибка была:
Недопустимый доступ к красной зоне стека 0x10d446ba0 rip=0x10c384b87
Ошибка шины
Это полностью убило JVM.
Как только я понял, что это плохая строка json, исправить это было легко.
Надеюсь, что это помогает кому-то.