2013-04-08 2 views
0

У меня есть утечка памяти. Это, скорее всего, в GUI или ExecutorCompletionService. Каковы параметры мониторинга памяти программ?Запуск памяти в Java

Да, у меня ошибка памяти. Я установил -XX: + HeapDumpOnOutOfMemoryError для аргументов vm в eclipse, чтобы сгенерировать файл дампа. Ситуация заключается в том, что ExecutorCompletionService работает с пулом потоков для задач, требующих вычислительных ресурсов. Потоки сигнализируют поток gui с промежуточными результатами.

Я изучаю модульный тест для класса ExecutionController и задавался вопросом, могу ли я интегрировать мониторинг памяти в модульный тест.

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

В ближайшем будущем я попробую предлагать варианты мониторинга.

+2

Вы можете прикрепить профилировщик с помощью java-процесса и монитора –

+0

Просьба представить более подробную информацию. Вы получаете ошибки OutOfMemory? –

+0

@ PM77-1 - предположительно да. Но не очень актуально. Он не хочет, чтобы мы помогли ему решить эту проблему. Он хочет, чтобы мы рассказали ему, как самому решить проблему. –

ответ

0

По состоянию на JDK 6 в каталоге \bin включен профилирующий инструмент под названием jvisualvm. Вы можете сканировать использование ЦП, контролировать память и потоки и т. Д.

Подробнее об этом можно узнать here.

+0

Я закончил использовать Jconsole для просмотра памяти, с перерывами, установленными в коде. Было немного полезно нажать паузу, пока память внезапно увеличилась. В этом случае причиной был бесконечный цикл рекурсии, созданный несколькими членами toString. – 2013-04-20 11:28:26

1

Утечка памяти может быть вызвана из-за превышения размера стека или кучи JVM. Первый шаг в выявлении утечки памяти подтверждает, что она есть. Попробуйте увеличить кучу и пространство стека с помощью параметров командной строки JVM. -xmx и -xss - это варианты увеличения размера кучи и стека соответственно.

Как только это подтвердится, существует множество инструментов, которые помогут сузить блок злоумышленника кода, чтобы идентифицировать утечку. Моим любимым является получение дампа работающих потоков во время исключения из памяти, при условии, что это произошло, и изучения дампа. Пожалуйста, попробуйте java -Xrunhprof:help для более подробной информации. Я использую Memory Analyzer (MAT), плагин eclipse для анализа дампа.

Кроме того, Java Memory Extensions содержит подробные сведения о том, как исследовать запущенную JVM в отношении размеров потоков, кучи и стека. Если вы используете JDK 1.6 и выше, он поставляется с visual vm, профилирующим инструментом, который также поможет в этом.

+0

Я увеличил максимальный и минимальный размер кучи, но это не помогло. Более интенсивные задачи оцениваются. Я посмотрю на дамп памяти в ближайшем будущем. Я использую 1.7, поэтому, если нужно, я могу посмотреть расширения памяти. – 2013-04-09 03:49:06

Смежные вопросы