Я спросил это до , но не получил ответа - возможно, это было слишком долго - поэтому я перефразирую вопрос:Примерно через 3 дня после запуска приложения, использующего Apache Axis2 v.1.5.4, OutOfLangMemoryError начинает происходить ( размер кучи = 2048 МБ ), что приводит либо кснижение производительности сервера приложений ( WAS v.7.0.0.7) или остановка логического сервера (процесс все еще существует).
По некоторым причинам я должен поставить таймер = 1 секунду на процесс вызова веб-службы, в пиковое время происходят тайм-ауты (либо при установлении, либо при чтении).
Поиск в javacores и heapdumps , выданных сервером:Похоже, что есть зависшие потоки 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 независимо от того, был ли получен ответ или нет, то есть произошло исключение?