Почему не работает опция -baseline в jhat?

Почему каждый объект помечается как новый, а не только объекты, которые находятся во втором снимке, но отсутствуют в моем базовом снимке? Оглядываясь в Интернете, я вижу некоторые предложения, что мне нужно использовать hprof вместо jmap для создания дампов памяти, но похоже, что hprof генерирует дампы в точно таком же формате.

Это JDK 1.6.0_14; Я пробовал как на Windows, так и на UNIX.

2 ответа

Решение

jhat -baseline на самом деле не будет работать с дампами, созданными jmap, Я не уверен, но я полагаю, что это связано с тем, что hprof подключается к JVM с самого начала и отслеживает объекты, что позволяет ему генерировать согласованные идентификаторы для нескольких дампов. Не цитируйте меня об этом. В любом случае, важно отметить, что дампы jmap не работают.

Однако еще не все потеряно. Идите и получите анализатор памяти Eclipse. (Если вы не используете Eclipse, не бойтесь, вы можете получить его как отдельный исполняемый файл.) Он быстрее, чем jhat, использует меньше памяти, чем jhat, и может делать то, что вы хотите:

  1. Откройте dump2 (с помощью File|Open Heap Dump). Не беспокойтесь о том, чтобы создать отчет для вас.
  2. Откройте dump1 (так же). Опять нет отчета.
  3. На вкладке для dump2 нажмите "Гистограмма"
  4. Справа от панели инструментов во вложенной вкладке "Гистограмма" находится "Сравнить с другим дампом кучи". Нажмите на это.
  5. Выберите dump1 в вашем диалоге в качестве дампа для использования в качестве базовой линии.
  6. Presto, у вас есть различия между dump2 и базовым dump1.

Все это прекрасно работает с дампом jmap.

Похоже, вам нужно использовать hprof. Но вы уверены, что используете тот же экземпляр виртуальной машины?

Опция -baseline позволяет сравнивать два дампа, если они были созданы HPROF и из одного и того же экземпляра виртуальной машины. Если в обоих дампах появляется один и тот же объект, он будет исключен из списка новых зарегистрированных объектов. Один дамп указывается как базовый уровень, и анализ может фокусироваться на объектах, созданных во втором дампе с момента получения базового уровня.

Если все будет считаться новым, я позабочусь о том, чтобы это был тот же экземпляр виртуальной машины.

Вот

Другие вопросы по тегам