Подтвердить что ты не робот

Можно ли создать экземпляр jvm из кучи кучи?

Всем известно, что куча кучи может быть получена из запущенной JVM. Есть ли другой способ? Можем ли мы запустить JVM с помощью кучи кучи?

У меня уже давно возникает этот вопрос. Если это возможно, это позволит решить много времени и подумать об этом легко для инженера службы поддержки. Это помогает большому времени в тех случаях, когда нам нужно воссоздать некоторые редкие проблемы, с которыми сталкивается наш клиент. [Представьте, что базовое оборудование и время выполнения Java одинаковы, а также все поддерживающие файлы также присутствуют в соответствующем месте в файловой системе].

Добавлено примечание: намерение сделать это не тогда, когда OOM происходит, но в любой момент после запуска JVM.

4b9b3361

Ответ 1

Нет, вы не можете. В каждом открытом файле вам понадобятся такие вещи, как текущая позиция. Это влияет на то, какие данные возвращаются при простом последовательном чтении. Реставратору необходимо будет открыть каждый файл и вернуть его в правильное положение. Это может быть невозможно для потоков, недоступных для поиска.

Сегментация, специфичная для программы, является гораздо более вероятным путем, а затем настраивает программу там.

Кроме того, поскольку кучи кучи, как правило, из OutOfMemory situtaions, воссоздание JVM из того же будет снова вызывать OutOfMemoryException. Если вы берете кучу кучи между ними, затем сериализуете свои объекты и восстанавливаете их при появлении jvm.

(содержимое скопировано из комментариев по этому вопросу, авторы almas-shaikh и patricia-shanahan)

Ответ 2

Я думаю, что вы ищете такие инструменты, как Java Mission Control и Chronon DVR (коммерческий). Это поможет вам провести анализ инцидентов, сбор событий и профилирование, отладку во время путешествия (как указано в хрононе)

Согласно их документации:

Управление миссией Java

Java Flight Recorder и Java Mission Control вместе создают полная цепочка инструментов для непрерывного сбора низкого уровня и подробного которая позволяет анализировать инцидент после факта. Ява Flight Recorder - это структура профилирования и сбора событий в Oracle JDK. Он позволяет администраторам и разработчикам Java собрать подробную информацию о низком уровне о том, как Java Virtual Машина (JVM) и приложение Java ведут себя. Миссия Java Control - это расширенный набор инструментов, который позволяет эффективно и подробный анализ обширных данных, собранных Java Flight Recorder. Цепь инструментов позволяет разработчикам и администраторам собирать и анализировать данные из приложений Java, работающих локально или развертывается в производственных средах. Начиная с выпуска Oracle JDK 7 Обновление 40 (7u40)

Некоторые ключевые особенности Chronon Recording Server, которые будут полезны в вашем случае:

Сервер записи специально разработан для длительной работы, сервер которые работают в течение нескольких недель или месяцев. Recording Server позаботится о разделении записи, если он получит слишком большой и вымывает старые записи.

Избавьтесь от необходимости смотреть на длинно-мелкие подробные файлы журналов на отлаживайте свою программу. Просто воспроизведите все исполнение и посмотрите именно то, что имело место в вашей программе. Сервер записи позволяет обмениваться записью на разных машинах среди членов команды или нескольких команд.

Ответ 3

Для создания дампа кучи из запущенной JVM вы также можете использовать jhat, или jcmd (с помощью команды GC.heap_dump), оба существуют в папке JDK/bin. MAT - это один из способов анализа содержимого дампа. Java Mission Control имеет инструмент JOverflow, который анализирует свалки кучи, но только для того, чтобы смотреть на шаблоны отхода памяти.

Я никогда не слышал о том, чтобы перезапустить JVM из образа, дамп кучи будет недостаточным, поскольку он содержит только объекты Java, а не скомпилированный код и другие вещи.