EXCEPTION_STACK_OVERFLOW с использованием JAX-WS - PullRequest
2 голосов
/ 28 декабря 2011

В основном у меня есть веб-сервис JAW-WS.Я звоню это миллионы раз, в пакетном режиме, из внешнего приложения.После примерно 20 миллионов звонков приложение вылетает с ошибкой ниже.Я попытался обновить версию Java, пытаясь на разных машинах и все то же самое.

Произошло неустранимое переполнение стека.

В среде выполнения Java обнаружена фатальная ошибка:

EXCEPTION_STACK_OVERFLOW (0xc00000fd) при pc = 0x7c90e8e5, pid= 9396, tid = 9000

Версия JRE: 6.0_29-b11 Java VM: Java HotSpot (TM) Клиентская виртуальная машина (20.4-b02 смешанный режим, совместное использование windows-x86) Проблемный кадр: C [ntdll.dll +0xe8e5]

Файл отчета об ошибке с дополнительной информацией сохраняется как: U: hs_err_pid9396.log

Если вы хотите отправить отчет об ошибке, посетите: http://java.sun.com/webapps/bugreport/crash.jsp

Я прочитал, что EXCEPTION_STACK_OVERFLOW вызвано рекурсивной или вложенной функцией, которая не возвращает корректно.Я не думаю, что это проблема моего случая, так как у меня есть только один звонок, который выполняет некоторую работу и возвращает.Глупый вопрос, но есть ли способ очистки стека, может быть, я могу делать это каждые x часов?

Мне удалось получить чистую установку сервера 2008 и последней JRE.когда я запускаю одно и то же приложение на этой машине, я получаю следующее сообщение.Я уверен, что лучше смотреть на эту ошибку, чем на последнюю, так как это живая коробка, на которой будет развернуто приложение.Спасибо

28 декабря 2011 14:34:58 com.sun.xml.internal.ws.model.RuntimeModeler getRequestWrap

perClass
INFO: Dynamically creating request wrapper Class Professional
Services.jaxws.CleanResponse
28-Dec-2011 14:34:58 com.sun.xml.internal.ws.model.RuntimeModeler getResponseWra
pperClass
INFO: Dynamically creating response wrapper bean Class Professional
Services.jaxws.CleanResponse
Exception in thread "Thread-4" java.lang.OutOfMemoryError: unable to create new
native thread
        at java.lang.Thread.start0(Native Method)
        at java.lang.Thread.start(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.addIfUnderMaximumPoolSize(Unk
nown Source)
        at java.util.concurrent.ThreadPoolExecutor.execute(Unknown Source)
        at sun.net.httpserver.ServerImpl$Dispatcher.handle(Unknown Source)
        at sun.net.httpserver.ServerImpl$Dispatcher.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

Ответы [ 2 ]

2 голосов
/ 28 декабря 2011

Это исключение означает, что вы столкнулись с ошибкой в ​​Java.Java никогда не должна сталкиваться с переполнением стека на уровне ОС, вместо этого она всегда должна выдавать свое собственное исключение StackOverflowException.Все, что вы можете сделать с одним из них, это попробовать более новый или более старый JRE и сообщить об этом в Oracle.

0 голосов
/ 28 декабря 2011

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

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