2016-06-20 4 views
8

Есть ли какие-либо инструменты, которые могут получить дамп метаданных из Java8 hotspot vm?Как получить Java8 Metaspace dump (не куча кучи)

+3

В какой форме вы хотели бы получить это и для чего? Обратите внимание, что данные в Metaspace не являются объектами Java. Возможно, вас не интересуют внутренние структуры HotSpot, но в чем-то еще. – apangin

+0

У нас есть приложение, вызывающее ошибку Metaspace OOM с 1G MaxMetaspaceSize, и я хотел знать, как используются память Memaspace. – czh

ответ

9

Кажется, что вы столкнулись с утечкой класса.
Использование

  • jmap -clstats PID сбросить статистику загрузчика классов;
  • jcmd PID GC.class_stats, чтобы распечатать подробную информацию об использовании памяти каждого загруженного класса. Последнее требует -XX:+UnlockDiagnosticVMOptions.

Дамп кучи также поможет, поскольку каждый класс в метапассе имеет соответствующий экземпляр java.lang.Class в куче.

+0

Привет, спасибо за ваш совет. Я смог сбросить всю кучу, используя команду jmap -dump, однако я изо всех сил пытаюсь запустить команду jhat для анализа файла дампа. Свалка кучи составляет около 5 ГБ, и jhat работает 2 часа без завершения, это нормально? – czh

+0

jhat в конечном итоге завершается ошибкой OOM в кучном пространстве после запуска около 2 часов. – czh

+1

@czh [Eclipse Memory Analyzer] (http://www.eclipse.org/mat/) отлично работает даже с большими кучами. – apangin