OutOfLangMemoryError引起的Apache Axis2的

问题描述:

我问这个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的线程终止,是否回复或不回复,即发生异常?

我建议您在应用程序中指出安装了所有插件的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