Как определить причину ошибки OutofMemoryError?

У меня есть жалоба на то, что мое серверное приложение дает сбой при высокой нагрузке.
Это веб-приложение, работающее в Tomcat 5.
Я вижу дампы потоков и вижу ошибку OutOfMemory

1TISIGINFO Dump Event "systhrow" (00040000) Detail
"java/lang/OutOfMemoryError" "Failed to create thread: retVal -1073741830, errno 12" >received 1TIDATETIME Date: 2012/07/17 at 20:03:17 1TIFILENAME >Javacore filename:C:\ServerApplication\Tomcat5\bin\javacore.34545719.4646464.4172.0003.txt

. Информация о куче следующая:

Maximum Java heap size : 1500m    
Initial Java heap size : 256m

Это конфигурация для начального и максимального размера кучи (32-битная Java)

Я также вижу, что есть свободное место в куче

1STHEAPFREE    Bytes of Heap Space Free: 2D19F3C0   
1STHEAPALLOC   Bytes of Heap Space Allocated: 5DC00000

Это около 750 МБ свободного места, верно?

И из анализа метода потока я вижу, что количество потоков равно 695, из которых 49%составляет java/lang/Object.wait(Native Method), а 39%находится в sun/misc/Unsafe.park(Native Method)
. Также я вижу это NO JAVA STACK 1%, не уверен, что это значит.
Также 0 ступеней заблокировано, а 2%находится в состоянии Runnable.

Я не уверен, как интерпретировать эту информацию или как двигаться дальше, чтобы обнаружить основную причину.
Любая помощь в этом?

10
задан Jim 27 July 2012 в 06:43
поделиться