2011-12-28 17 views
2

基本上我有一個JAW-WS web服務。我從外部應用程序批量調用了數百萬次。大約2000萬次調用後,應用程序崩潰,下面的錯誤。我已經嘗試升級java版本,嘗試在不同的機器上,它都是一樣的。使用JAX-WS的EXCEPTION_STACK_OVERFLOW

發生了不可恢復的堆棧溢出。

已經由Java運行時環境中檢測到致命錯誤:

EXCEPTION_STACK_OVERFLOW(0xc00000fd)在PC = 0x7c90e8e5,PID = 9396, TID = 9000

JRE版本:6.0_29-B11的Java VM :爪哇的HotSpot(TM)客戶機VM (20.4-B02混合模式下,共享的窗口86)有問題的幀:C [NTDLL.DLL + 0xe8e5]

與更多的信息的錯誤報告文件保存爲:U: hs_err_pid9396.log

如果您想提交錯誤報告,請訪問: http://java.sun.com/webapps/bugreport/crash.jsp

我已閱讀,EXCEPTION_STACK_OVERFLOW由遞歸所致,或嵌套不正確返回功能。我不認爲這是我的問題,因爲我只有一個電話會做一些工作並返回。愚蠢的問題,但有沒有清除堆棧的方式,也許我可以每x小時做一次?

我設法得到了服務器2008和最新的JRE的乾淨安裝。當我在這臺機器上運行相同的應用程序時,我收到以下消息。我確定看看這個錯誤比上一次更好,因爲這是應用程序將部署的活動框。由於

28日 - 12月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

此異常意味着你曾經遇到過在Java中的錯誤。 Java應該永遠不會遇到操作系統級別的堆棧溢出,它應該始終拋出自己的StackOverflowException。您可以使用其中的一種方法嘗試更新或更舊的JRE,並將其報告給Oracle。

+0

哦哇真的嗎?這是否意味着我無能爲力?我唯一的工作就是在6小時後關閉應用程序,然後再啓動它,cron作業窗口調度程序。有什麼我可以去編程實現這個? 也我如何找出哪個版本的JRE使用,即一個沒有這個錯誤。甲骨文會告訴我,一旦我提交了錯誤? – user1119522 2011-12-28 15:54:09

+0

去他們的臭蟲記者,看看你看到了什麼。一般來說,他們不是很有幫助。你沒有太多的選擇,只能下載幾個不同的版本並嘗試實驗。我無法幫助你解決重啓的問題,打開另一個問題。 – bmargulies 2011-12-28 16:40:34

0

不知道這個答案是否有效,或許你已經做到了。嘗試在幾次迭代之後調用垃圾收集器,定義&使用變量只在需要的範圍內&一旦它們的用法完成就賦予它們空值。

+1

也不會在內存中保留大量數據 – Aniruddha 2011-12-28 15:30:44

+0

我已經使用netbeans執行了應用程序的配置文件,我可以看到,一旦堆達到最大16mb,GC就會週期性地調用。我也厭倦了在Web服務返回之前清空這些變量,但仍然不幸:(...謝謝你的建議。它至少幫助我證明我在故障排除步驟方面的正確軌道。 – user1119522 2011-12-28 15:51:43

+1

是否可以發佈代碼?也增加堆大小 – Aniruddha 2011-12-28 19:40:12