Расположение файла кучи дампа Java при использовании jconsole? - PullRequest
4 голосов
/ 28 апреля 2010

Ну, это смущает ...

Я начинаю играть с Eclipse Memory Analyzer, чтобы искать утечки памяти Java на коробке Windows. Шаг 1 - получить файл дампа кучи. Для этого я запускаю процесс Java (javaw.exe) из Eclipse и подключаюсь к нему с помощью jconsole. Затем на вкладке jconsole MBeans я нажимаю кнопку dumpHeap. В первый раз, когда я сделал это, я увидел всплывающее окно с сообщением, что он создал файл дампа кучи, но не указал его имя или местоположение. Теперь всякий раз, когда я снова выполняю dumpHeap при подключении к другому процессу javaw.exe, jconsole говорит:

Problem invoking dumpHeap : java.io.IOException: File exists

и, конечно, не дает его имя или путь. Где это может быть?

Я искал на своем диске C: (с помощью инструментов командной строки cygwin) файлы, содержащие «hprof», «java_pid» или «heapdump», и не нашел ничего правдоподобного. Я даже использовал поиск Windows, чтобы найти все файлы в моей рабочей области Eclipse, которые изменились за последний день.

Я использую Sun Java 1.6 JVM, и у меня нет -XX: HeapDumpPath.

Обновление (28 апреля 2010 г.): Исходное местоположение файла кучи должно быть определено jconsole, инструментом, с которого я запустил дамп кучи. Расположение дампов кучи JVM должно применяться только к дампам кучи, которые он вызывает (например, для исключения OutOfMemoryException).

Предложение Мэтта Б использовать jvisualvm прекрасно решает мою проблему, указывая на гораздо более полезную замену старой jconsole. Он имеет хороший профилировщик памяти, который показывает, какие типы объектов наиболее многочисленны и занимают больше всего памяти. И у него есть монитор, который показывает фактическое использование памяти с течением времени. Когда вы запрашиваете дамп кучи, он сообщает вам даже имя файла! Анализатор памяти Eclipse дает вам полную информацию.

Ответы [ 5 ]

8 голосов
/ 28 апреля 2010

Попробуйте jvisualvm , у него гораздо лучший интерфейс.

Обратите внимание, что начиная с версии 7 JDK с обновлением 7 или выше, Java VisualVM поставляется в комплекте с JDK. Смотри здесь .

6 голосов
/ 07 июля 2010

почему бы вам не установить первый параметр для dumpHeap (String, boolean) при попытке вызвать dumpHeap () из jconsole? это местоположение и имя файла сгенерированного heapdump.

4 голосов
/ 28 апреля 2010

Согласно документам для Sun Java SE6 JVM:

По умолчанию дамп кучи создается в файл с именем java_pid <<em> pid >. hprof в рабочий каталог ВМ

В Eclipse рабочий каталог определяется на вкладке «Аргументы» диалогового окна «Запуск конфигураций». Значением по умолчанию является тот же каталог, что и класс, который вы используете.

2 голосов
/ 28 апреля 2010

Вы всегда можете использовать ProcessMonitor , чтобы увидеть, куда он пытается написать :) Сделал это сам в прошлом.

0 голосов
/ 13 января 2015

Я нашел дамп-файл в той же папке, где находится .bat-файл, который запускает мое приложение Java. (Я использую Windows 8.1, Java 7) В моем случае это папка jboss, / jboss-as / bin /. Чтобы найти его, я искал * файлы с сегодняшней датой создания и более 200 МБ.

...