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