Вопрос по jvm, java – Как устранить ошибку «Недостаточно памяти» в производственной системе

1

Мы используем JBoss_4_0_4_GA с JDK 1.5.0 (без обновлений) в Windows

Сервер JBoss работает в оболочке (версия 3.2.3)http://wrapper.tanukisoftware.org.

Поскольку JVM очень старая, я даже не могу использовать опцию -XX: + HeapDumpOnOutOfMemoryError на JVM.

Каковы мои варианты, чтобы выяснить проблему?

Как обычно, исключение «Недостаточно памяти» происходит в разных частях приложения.

Я не могу сразу обновить JVM.

    The current VM settings
    Java Additional Parameters
    wrapper.java.additional.1=-Xms512m
    wrapper.java.additional.2=-Xmx1024m
    wrapper.java.additional.3=-Dsun.rmi.dgc.client.gcInterval=3600000
    wrapper.java.additional.4=-Dsun.rmi.dgc.server.gcInterval=3600000
    wrapper.java.additional.5=-Dorg.xml.sax.driver=org.apache.xerces.parsers.SAXParser
    wrapper.java.additional.6=-Djava.endorsed.dirs=D:/jboss-4.0.4.GA/lib/endorsed

Фрагменты исключения

INFO | jvm 1 | 2012/05/31 11:25:03 | 11:25:03,502 ERROR [SOAPFaultExceptionHelper] SOAP request exception INFO | jvm 1 | 2012/05/31 11:25:03 | java.rmi.RemoteException: java.lang.OutOfMemoryError: Java heap space; nested exception is: INFO | jvm 1 | 2012/05/31 11:25:03 | java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java heap space

INFO | jvm 1 | 2012/05/31 11:25:03 | Caused by: java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java heap space INFO | jvm 1 | 2012/05/31 11:25:03 | at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:205) INFO | jvm 1 | 2012/05/31 11:25:03 | at java.util.concurrent.FutureTask.get(FutureTask.java:80)

Ваш Ответ

2   ответа
0

Install a profiler agent and connect a profiler on your application. This has of course some serious performance impact which may be not acceptable in your production environment. But this would allow you to monitor the application and perform a memory dump when Heap space is almost full.

Reproduce your production environment elsewhere and also use a profiler. If your issues only appear with big loads, you may have to create load tests so that you reach the OOME.

Использование профилировщика - ваш лучший шанс обнаружить утечки памяти.

В противном случае вы всегда можете попробовать выполнить статический анализ кода, используя PMD и Findbugs (среди других инструментов статического анализа), которые могут обнаружить некоторые ошибки.

Я не могу запустить профилировщик в производственной системе. user1431063
3

jmap (в упомянутых вами тегахjava 5 так что это должно быть возможно). Делайте несколько дампов, когда сервер все еще работает (например, каждый час или около того).

Затем проанализируйте их вEclipse MAT, Поиск объектов или коллекций объектов, которые растут на каждой свалке. Скорее всего, это будет ваша утечка памяти.

полностью согласен с тобой @npe. Я также использую MAT для анализа дампов, но хочу добавить указатель на YourKit (www.yourkit.com), потому что у этой программы меньше проблем с реальными большими дампами памяти, и она также предлагает инструмент для сравнения дампов. Это не бесплатно, хотя.
К сожалению, Jmap не доступен для Windows user1431063
Конечно, это. Он распространяется как часть JDK для Windows.

Похожие вопросы