#java #jboss #g1gc #metaspace
#java #jboss #g1gc #метапространство
Вопрос:
Сервер Keycloak / JBoss, работающий с использованием Java 8, был переключен на G1GC, а значение a -XX:MaxMetaspaceSize
было установлено на 256 МБ. Вскоре он перестал отвечать на запросы, заполняя журналы ошибками OutOfMemory: Metaspace. Журналы GC не были включены. Сервер был подключен к службе мониторинга Dynatrace, которая показала наличие большого количества метапространства.
Из 256 МБ, выделенных в одном случае, было использовано 191 МБ. Из 256 МБ, выделенных во втором случае, использовано 165 МБ.
Я понимаю, что для освобождения метапространства был вызван GC, и, поскольку он не мог освободить достаточно места, он запускал GC после GC, поэтому имеет смысл, почему процесс застрял. Однако я не могу понять, почему процесс исчерпывал метапространство, даже когда много было свободно. Никаких других параметров JVM не было предоставлено (кроме XMS / XMX). Во всех разделах памяти кучи было много свободного места. Что-то пыталось выделить 60 МБ места в метапространстве? Это единственная возможная причина?
Комментарии:
1. Другой причиной может быть то, что вы смотрите на средние значения, а не на максимальные значения. Добавьте метрику метапространства в пользовательскую диаграмму и убедитесь, что выбрана «максимальная» агрегация. Возможно, тогда значения будут ближе к максимальным.
2. У вас
UseCompressedClassesPointers
включено? Если это так, то MaxMetaspaceSize = фиксированный размер (метапространство сжатое пространство классов). Вы можете не устанавливать его явно, но он включен по умолчанию, еслиUseCompressedOops
включен. Итак, пожалуйста, проверьте свою конфигурацию.3. @rmunge Это может быть возможно, но используемый размер mataspace, показанный в dynatrace, соответствует, что заставляет меня думать, что он не растет и не уменьшается.
4. @suv3ndu Это интересно, поскольку UseCompressedOops действительно был включен в аргументы JVM. Есть ли какая-либо документация / ссылка, где это объясняется?
5. @HarisMushtaq Пожалуйста, ознакомьтесь с этим для получения подробной информации.