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