2016-09-04 5 views
2

Недавно я обновил версию java от 1,6 до 1,8. После перехода на java 1.8 потребление памяти в метаспазме увеличивается со временем (это наблюдается через JConsole.) Также при каждом доступе к веб-странице увеличивается размер метаданных. Итак,Как очистить метапас с помощью java 1.8

Можно ли каким-либо образом принудительно очистить Metaspace?

Есть ли способ проверить, что все идет в Metaspace, и увеличивает размер метаданных?

Какой GC (SerialGC, G1, ConcMarkSweep) эффективно очищает Метапространстве &, что JVM VM конфигурации следует использовать для GC?

Какова минимальная оперативная память java 1.8 для правильной работы с метаоблокацией? В моем случае он ограничен 256 МБ ОЗУ с равным объемом размера свопинга в миниатюрной Linux-коробке.

Если мы ограничим размер метараспределения, используя XX: MaxMetaSpaceSize, JVM выдает outofmemory: условие состояния.

+0

Возможный дубликат [Как получить Java8 Метапространстве дамп (не дамп кучи)] (http://stackoverflow.com/q/37919215/1362755) – the8472

+0

Вы имеете в виду как волшебный флаг «безжизненный»? Когда вы устанавливаете лимит, вы уже выполняете очистку, когда достигнут предел. Когда вы получаете «OutOfMemoryError» в свою очередь, это означает, что больше ничего не нужно очищать. – Holger

+0

Но почему нечего убирать особенно в метапассе? Если GC выполняется либо с помощью JVM, либо даже с помощью инструмента Jconsole, в области кучи значительное падение, но metaspace почти нетронутым. В чем причина этого? Класс загрузчика погрузчика? Как я могу обнаружить такой код из кода? –

ответ

0

Благодарим вас за ответы!

Я нашел Old JaxB and JDK8 Metaspace OutOfMemory Issue, чтобы изобразить ту же проблему, что и моя.

С «-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true», я смог получить стабильное использование метапроцессора.

С помощью этой опции, если мое приложение не работает (просто периодически обращается к веб-сервису, читает xml и отображает детали из xml на мой слой), он больше не увеличивает использование памяти ни в верхнем командном выводе не metaspace (в Jconsole).

Но если я выполняю какую-либо операцию (например, доступ к веб-страницам и выполнение операций с базами данных/файл IO и т. Д.), Использование памяти увеличивается. Так было и с java 1.6, но с java 1.6 память достигла своего нормального уровня в течение 5-6 минут. Но с java 1.8, для достижения нормального уровня требуется 10-12 часов.

Вот мои JVM конфигурации:

java -Dsun.rmi.dgc.client.gcInterval=60000 -XX:NewRatio=3 - 
XX:MinHeapFreeRatio=60 -XX:MaxHeapFreeRatio=70 -Xmx64M -Xms32M - 
XX:MetaspaceSize=12M -XX:+UseLargePagesInMetaspace - 
XX:CompressedClassSpaceSize=10M -XX:+UseLargePages - 
XX:+CMSClassUnloadingEnabled - 
Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true - 
Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false - 
Dcom.sun.management.jmxremote.authenticate=false - 
Dcom.sun.management.jmxremote.port=1099 -Dfile.encoding=UTF8 - 
Dorg.apache.jasper.compiler.disablejsr199=true -Duser.timezone=$timezone -jar start.jar 

 Смежные вопросы

  • Нет связанных вопросов^_^