IBM Websphere OutOfMemoryException - PullRequest
       13

IBM Websphere OutOfMemoryException

4 голосов
/ 08 октября 2008

Часто я обнаруживал исключение OutOfMemoryException на сервере приложений IBM Websphere. Я думаю, что это исключение происходит, потому что мое приложение извлекает огромные данные из базы данных. Итак, я ограничиваю все запросы, не получаю данные более 1000 записей и устанавливаю JVM WAS, следуя

+ Verbose garbage collection
+ Maximum Heap size = 1024 (RAM on my server is 16 GB and now I already change to 8192)
+ Debug arguments = -Djava.compiler=NONE -Xdebug -Xnoagent  
                    -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7777
+ Generic JVM arguments = -Dsun.rmi.dgc.server.gcInterval=60000 
                          -Dsun.rmi.dgc.client.gcInterval=60000 -Xdisableexplicitgc  
                          -Dws.log=E:\WebApp\log -Dws.log.level=debug
(ws.log and ws.log.level are my properties)

И я нашел heapdump , javacore и snap файлы в папке профилей. Я думаю, что они могут рассказать мне о причине проблемы, но я не знаю, как читать / использовать файлы heapdump, javacore и snap.

Подскажите, пожалуйста, как предотвратить / избежать / исправить OutOfMemoryException. Спасибо

Ответы [ 6 ]

3 голосов
/ 08 октября 2008

Если вы хотите посмотреть файлы дампа кучи, IBM предлагает инструменты для их анализа здесь .

1 голос
/ 19 мая 2009

"Спасибо за память" - хорошая статья об использовании памяти JVM, которая может помочь проанализировать эту проблему ...

Спасибо bwalliser за эту ссылку

1 голос
/ 08 октября 2008

Ответ на этот вопрос зависит от сообщения, связанного с OutOfMemoryException. Вы также можете попробовать -XX: MaxPermSize = ... и установить его на что-то большее, например, 256 м.

Кроме того, если у вас где-то есть рекурсивная функция, это может вызвать переполнение стека.

Если вы можете, пожалуйста, опубликуйте сообщение, связанное с исключением. Stacktrace также может помочь.

0 голосов
/ 10 октября 2008

На вопрос трудно ответить, если мы не знаем, что это за добрый из OutOfMemoryError; permgen и heapspace - два совершенно разных зверя.

Я много месяцев гонялся за perm-gen на JBoss, хотя этот специфический тип проблем был общим для любого сервера приложений, который перезагружал веб-приложения на лету. Сага задокументирована здесь .

Те дампы кучи, которые у вас есть ... возможно, вы можете проанализировать их в Eclipse MAT .

0 голосов
/ 09 октября 2008

Я предполагаю, что вы используете hibernate / JPA в качестве поставщика сохраняемости? Вы используете кэш второго уровня? Если это так, вы рассматривали возможность удаления больших наборов результатов из кэша?

0 голосов
/ 08 октября 2008

Попробуйте воспроизвести проблему локально, чтобы вы могли использовать такой инструмент, как JProfiler, для его устранения. Даже если вы не можете форсировать OOM локально, скорее всего, вы увидите увеличение памяти в JProfiler. Затем вы делаете снимки и ищите классы, которые не собираются мусором. Это не точная наука, но это намного проще, чем смотреть в кучу IBM. Однако, если вам нужно, старый способ проверки дампа кучи был с HeapRoots. Это может зависеть от версии, на которой вы находитесь. Я знаю, что в некоторых версиях IBM JDK возникают проблемы с сжатием, поэтому даже если у вас достаточно памяти, вы можете получить OOM, потому что недостаточно большого фрагмента.

...