OutOfLangMemoryError вызвана Apache Axis2 - PullRequest
0 голосов
/ 01 августа 2011

Я спросил это до , но не получил ответа - возможно, это было слишком долго - поэтому я перефразирую вопрос:Примерно через 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 независимо от того, был ли получен ответ или нет, то есть произошло исключение?

1 Ответ

1 голос
/ 01 августа 2011

Я бы порекомендовал вам указать Visual VM 1.3.2 со всеми установленными плагинами в вашем приложении. Он покажет вам, что происходит в вашей куче памяти поколений и во всех запущенных потоках. Я не могу дать вам ответ, но Visual VM сделает процесс более прозрачным.

...