2011-08-01 76 views
0

我問這個before,但沒有人迴應 - 也許是太長時間了 - 所以我改寫了一個問題:從開始使用的Apache Axis2的v.1.5.4應用
後大約3天,發生OutOfLangMemoryError開始(堆大小 = 2048 MB),導致無論是在降低了應用服務器(WAS v.7.0.0.7)性能或停止邏輯服務器(處理仍然存在)。
OutOfLangMemoryError引起的Apache Axis2的

對於一些原因,我必須把一個計時器 = 1秒的web服務調用過程,在峯值時間,超時發生(或者在建立或讀取)。

尋找在了Javacoresheapdumps由服務器拋出:
似乎有 Axis2的線程:

 
"Axis2 Task" TID:0x00000000E4076200, j9thread_t:0x0000000122C2B100, state:P, prio=5. 
at sun/misc/Unsafe.park(Native Method) 
at java/util/concurrent/locks/LockSupport.park(LockSupport.java:173) 
at java/util/concurrent/SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:433) 
at java/util/concurrent/SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:334) 
at java/util/concurrent/SynchronousQueue.take(SynchronousQueue.java:868) 
at java/util/concurrent/ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957) 
at java/util/concurrent/ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917) 
at java/lang/Thread.run(Thread.java:735) 

如何確保Axis2的線程終止,是否回覆或不回覆,即發生異常?

回答

1

我建議您在應用程序中指出安裝了所有插件的Visual VM 1.3.2。它會告訴你在你的世代堆內存和所有啓動的線程中發生了什麼。我無法給你答案,但Visual VM將使這個過程更加透明。

+0

感謝duffymo這樣一個有用的工具,但我主要關心的是通過使用Axis2 API來防止開發階段的問題,因爲它應該在那裏,我嘗試使用Stub,ServiceClient,Transport和ConfigurationContext cleanup()方法,但沒有運氣。也許我錯誤地使用了正確的API。 – guirgis

+0

使用Visual VM指向您的開發計算機並在本地運行應用程序。我不明白你的觀點。 – duffymo

+0

我使用了類似於Visual VM的jca(http://www.alphaworks.ibm.com/tech/jca)來分析Java核心/堆轉儲,看起來問題是由Axi2引起的。 我的觀點是,我在問是否有一些API確保所有資源都被清理(內存,線程)。 我發現29,459條線程在狀態「停放」在問題的時間。 – guirgis

相關問題