Разработанное нами приложение вызывает ошибку java.lang.OutOfMemoryError: Metaspace даже в среде -XX:MaxMetaspaceSize=512m. Это приложение состоит из множества jar-файлов, поэтому я предполагаю, что OutOfMemoryError вызван не утечкой памяти, а тем фактом, что существует так много классов. Поэтому я хочу знать, какие пакеты или jar-файлы вызывают нехватку метапространства.
Проблема
Вы можете использовать jmap, чтобы показать использование кучи Java, но я не смог найти способ показать гистограмму метапространства с помощью jmap.
- показывает гистограмму для экземпляров в куче Java, а не в метапространстве.
Код: Выделить всё
jmap -histo
- показывает только использование метаданных для каждого загрузчика классов, а не для каждого пакета/банки.
Код: Выделить всё
jmap -clstats
Есть ли есть ли способ получить гистограмму использования метапространства?
Например, я хочу знать: «Классы в Spring-*.jar занимают большую часть метапространства 512M».
Готовая функция JDK или JRE предпочтительнее.
Подробнее здесь: https://stackoverflow.com/questions/791 ... -histogram