Есть ли какие-либо инструменты, которые могут получить дамп метаданных из Java8 hotspot vm?Как получить Java8 Metaspace dump (не куча кучи)
ответ
Кажется, что вы столкнулись с утечкой класса.
Использование
jmap -clstats PID
сбросить статистику загрузчика классов;jcmd PID GC.class_stats
, чтобы распечатать подробную информацию об использовании памяти каждого загруженного класса. Последнее требует-XX:+UnlockDiagnosticVMOptions
.
Дамп кучи также поможет, поскольку каждый класс в метапассе имеет соответствующий экземпляр java.lang.Class
в куче.
Привет, спасибо за ваш совет. Я смог сбросить всю кучу, используя команду jmap -dump, однако я изо всех сил пытаюсь запустить команду jhat для анализа файла дампа. Свалка кучи составляет около 5 ГБ, и jhat работает 2 часа без завершения, это нормально? – czh
jhat в конечном итоге завершается ошибкой OOM в кучном пространстве после запуска около 2 часов. – czh
@czh [Eclipse Memory Analyzer] (http://www.eclipse.org/mat/) отлично работает даже с большими кучами. – apangin
В какой форме вы хотели бы получить это и для чего? Обратите внимание, что данные в Metaspace не являются объектами Java. Возможно, вас не интересуют внутренние структуры HotSpot, но в чем-то еще. – apangin
У нас есть приложение, вызывающее ошибку Metaspace OOM с 1G MaxMetaspaceSize, и я хотел знать, как используются память Memaspace. – czh