2016-04-07 2 views
4

Каково значение MetaspaceSize по умолчанию для 64-разрядных серверов? Я не мог найти его в официальной документации.Рекомендации по установке MetaspaceSize - java 8

Я наблюдаю, что на сервере JVM процесс, временами, частота GC становится высокой и продолжает расти. Если я перезапущу службу несколько раз, она вернется к стабильной. Я думаю, что это связано с обновлением JRE.

Размер JVM Heap max составляет 6 ГБ, но когда эта проблема возникает, мы видим, что используется только куча 3 ГБ. Metaspace растет очень мало и почти всегда заполнен. Я попытался увеличить metaspace до 1 ГБ, и это улучшает пропускную способность.

Я думаю, что происходит, что Metaspace по умолчанию настроен на очень низкое значение, и, таким образом, GC ударяет. Знак высокой воды постоянно увеличивается (опять же очень мало) каждый раз, когда происходит GC.

Я хочу установить MetaspaceSize (не уверен, что такое текущее значение).

Документы Oracle говорят, что нет никаких рекомендаций, чтобы знать, как установить MetaspaceSize. Но есть ли способ узнать, что будет правильным значением для его установки?

Один намек я получил от Docs Oracle заключается в следующем:

If the committed space available for class metadata as a percentage of the total committed space for class metadata is greater than MaxMetaspaceFreeRatio, then the high-water mark will be lowered. If it is less than MinMetaspaceFreeRatio, then the high-water mark will be raised.

Но до сих пор не удалось выяснить, как стабилизировать GCs..I три вопроса:

  1. Что такое по умолчанию MetaspaceSize на 64-битных серверах?
  2. Каковы значения по умолчанию: MaxMetaspaceFreeRatio, MinMetaspaceFreeRatio установлен на? Ответ: Он показывает, что Min is 40, Max is 70
  3. Как решить вопрос о значении Metaspacesize?
+1

' java -XX: + UnlockDiagnosticVMOptions -XX: + PrintFlagsFinal -version -XX: + UseG1GC | grep Metaspace' – Savior

+0

"* Я думаю, что происходит, что Metaspace по умолчанию имеет очень низкое значение, и, таким образом, GC ударяет в *" - Почему вы так думаете? Ваше объяснение не содержит намека на то, почему первое, что виновато, должно быть в метапассе, а не только в куче (или в свободной памяти) вообще. – Holger

+0

@Holger Я обновил описание с подробностями о том, почему я думаю, что проблема с метапроцессором. Метаспасе был не первым, кто виноват. – AshwiniR

ответ

1

Я думаю, что самый интересный вопрос - # 3, поэтому я отвечу на него первым. То, как я подошел к нему было запустить мое приложение в течение 24 часов с лесозаготовками ого включения с использованием этих параметров:

-XX:+PrintGC 
-XX:+PrintGCDetails 
-XX:+PrintGCDateStamps 
-XX:+PrintGCCause 
-XX:+PrintTenuringDistribution 
-XX:+PrintGCApplicationStoppedTime 
-XX:+PrintGCApplicationConcurrentTime 
-Xloggc:gc.log 

Тогда я сделал это:

grep Metaspace gc.log 

и увидел, что «используется» значение быстро выросли до 80M ... поэтому я MetaspaceSize к 100M

-XX:MetaspaceSize=100M 

и вуаля - не более ГКС из-за Метапространство.

Похоже, комментарий @ столпом в значительной степени ответили на ваш первый 2 вопрос о том, как определить параметры по умолчанию Метапространства для своей реализации ... Я буду включать его здесь для полноты:

java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version -XX:+UseG1GC | grep Metaspace 

Технически, @ Комментарий Pillar не сообщает вам размер по умолчанию для Metaspace для любого 64-битного сервера, но это связано с тем, что ваш первый вопрос немного вводит в заблуждение, поскольку согласно документации эти значения по умолчанию меняются для каждой реализации.

См:

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/considerations.html

В частности, часть в нижней части, где он говорит, «По умолчанию размер MetaspaceSize зависит от платформы и варьируется от 12 МБ до 20 МБ»