Как я могу сделать дамп кучи на Java 5 без предварительного сбора мусора?

StackOverflow https://stackoverflow.com/questions/1268336

Вопрос

У нас есть давно работающее серверное приложение, работающее на Java 5, и, профилируя его, мы видим, что старое поколение со временем медленно растет.Он правильно освобождается на полном сборщике мусора, но мне бы хотелось иметь возможность просматривать недоступные объекты в Eclipse MAT, используя дамп кучи.Я успешно получил дамп кучи, используя +XX:HeapDumpOnCtrlBreak, но JVM всегда выполняет сборщик мусора перед сбросом кучи.Очевидно, этого не происходит на Java 6, но мы пока застряли на 5.Есть ли способ предотвратить это?

Это было полезно?

Решение

Я предлагаю сторонний профилировщик, например ВашКит, что может позволить вам делать снимки без предварительного запуска GC.Дополнительный бонус: вы можете сделать снимок без всяких махинаций с нажатием Ctrl.

Другие советы

используйте jconsole или VisualVM или JMC или...другая консоль управления jmx.откройте HotSpotDiagnostic в com.sun.management.выберите метод дампКуча и введите два параметра:

  • путь к файлу дампа
  • (истина/ложь) выгружать только живые объекты.использовать false сбросить все объекты.

Обратите внимание, что файл дампа будет записан JVM, к которой вы подключились, а не JVisualVM, поэтому, если JVM работает в другой системе, он будет записан в этой системе.

enter image description here

Пробовали ли вы стандартный инструмент jmap, поставляемый с JDK?Плата за использование jmap была официально представлена ​​в Java 5.

Пример командной строки:/java/bin/jmap -heap:format=b

Результат можно обработать с помощью стандартного инструмента jhat или приложений с графическим интерфейсом, таких как MAT.

У меня есть код, который может программно создавать дамп кучи через JMX:

Связь: JmxHeapDumper.java

В комментариях к исходному коду есть 2 ссылки на статьи, содержащие полезную информацию о том, как снимать дампы кучи.Я не знаю наверняка, но если вам повезет, возможно, подход JMX позволит избежать GC.Надеюсь это поможет !

jПрофилер (ej-технологии) может это сделать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top