基本上我有一个JAW-WS Web服务。我从外部应用程序批量调用了数百万次。大约2000万次调用后,应用程序崩溃并出现以下错误。我尝试升级java版本,尝试在不同的机器上运行它们都是一样的。
发生了不可恢复的堆栈溢出。
Java Runtime Environment检测到致命错误:
EXCEPTION_STACK_OVERFLOW(0xc00000fd)at pc = 0x7c90e8e5,pid = 9396, TID = 9000
JRE版本:6.0_29-b11 Java VM:Java HotSpot(TM)客户端VM (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-Dec-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)
答案 0 :(得分:2)
此异常表示您遇到了Java中的错误。 Java永远不会遇到操作系统级别的堆栈溢出,它应该总是抛出自己的StackOverflowException。您可以使用其中之一来尝试更新或更旧的JRE,并将其报告给Oracle。
答案 1 :(得分:0)
不确定这个答案是否有效,或者你已经完成了。尝试在几次迭代后调用垃圾收集器,定义&仅在所需范围内使用变量&一旦完成使用,就为它们分配空值。