Назад | Перейти на главную страницу

Настройка JVM сервера Glassfish

Мне нужно настроить Сервер Oracle Glassfish и после некоторого исследования я придумал конфигурацию, которую хотел бы предложить. Любые предложения и / или исправления приветствуются.

Сведения о моем оборудовании / ОС (соответствующие):

Мои параметры JVM

Q1 - Некоторые предлагают 33% (-XX:NewRatio=3) соотношение, которое приведет к 3g Eden. Разве это не было бы слишком большим пространством для очистки GC (с его 18 потоками)?

2 квартал - Я не мог найти для этого хорошую цену.

3 квартал - Это соотношение по умолчанию. Некоторые говорят, что эта опция не влияет на производительность.

4 квартал - То же, что и Q3.

Q5 - Не знаю, что за это будет выгодно.

Вам следует добавить параметры ведения журнала JVM / GC, это позволит вам отслеживать действия GC и поможет вам определить оптимальные значения для Q1, Q3, Q4, Q5. Кроме того, ведение журнала GC почти не требует накладных расходов, поэтому вы можете безопасно использовать его в производственной среде:

Журнал JVM / GC включен, например: -XX:+PrintTenuringDistribution -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log -XX:+HeapDumpOnOutOfMemoryError -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -showversion

Q1: 3 ГБ - это не слишком большой размер YounGen, если учесть, что общий размер кучи составляет 9 ГБ. Вам нужно проверить журналы GC, чтобы узнать, какой размер является оптимальным.

Q2: Вероятно, этого достаточно, вы также можете протестировать -Xss256k.

Q3: В -XX:SurvivorRatio опция игнорируется, если вы не используете -XX-UseAdaptiveSizePolicy, поэтому люди не видят эффекта от этой опции. Учтите также -XX:InitialSurvivorRatio=3 и -XX:TargetSurvivorRatio=90. Но будьте осторожны с отключением адаптивного изменения размеров и делайте это только в том случае, если вы знаете, что делаете.

Q4: Это правильное значение, хотя я не видел, чтобы оно оказало влияние. GC может решить продвигать объекты раньше. Использовать -XX:+PrintTenuringDistribution следить за этим.

Q5: Вы можете определить это из журналов GC, которые покажут вам занятость PermGen.

Дополнительные параметры что вы могли бы рассмотреть:

  • -XX:+AggressiveOpts
  • -XX:+PrintClassHistogramBeforeFullGC -XX:+PrintClassHistogramAfterFullGC для отладки проблем с GC
  • -XX:-UseBiasedLocking - отключение предвзятой блокировки обычно рекомендуется для серверов приложений
  • -XX:+UseLargePages - это поможет вашей производительности, но вам также необходимо настроить это в ОС.

Некоторые полезные советы можно найти в Производительность Java книга.