Какой флаг JVM устанавливает порог служебной нагрузки GC, упомянутый в журнале G1Ergonomics?
Я использую сборщик мусора G1.
Вы можете включить журналы политики адаптивного размера с помощью
-XX:+PrintAdaptiveSizePolicy
Вот пример вывода в логах GC
1822.780: [G1Ergonomics (Определение размера кучи) попытка расширения кучи, причина: недавние издержки GC выше порога после GC, недавние издержки GC: 11,48 %, порог: 10,00 %, незафиксированные: 0 байт, расчетная величина расширения: 0 байт (20,00 %)]
Какой флаг JVM управляет порогом: 10,00 %, который там упоминается?
Ниже приведены некоторые флаги, которые казались связанными, но я попытался установить другое значение для некоторых из них, и сообщение журнала не изменилось.
user@host:/home/logs/cassandra$ java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version | egrep "Threshold|Percent|Ratio"
intx BackEdgeThreshold = 100000 {pd product}
intx BiasedLockingBulkRebiasThreshold = 20 {product}
intx BiasedLockingBulkRevokeThreshold = 40 {product}
intx BlockLayoutMinDiamondPercentage = 20 {C2 product}
uintx CMSIsTooFullPercentage = 98 {product}
double CMSLargeCoalSurplusPercent = 0.950000 {product}
double CMSLargeSplitSurplusPercent = 1.000000 {product}
uintx CMSPrecleanThreshold = 1000 {product}
uintx CMSScheduleRemarkEdenSizeThreshold = 2097152 {product}
uintx CMSScheduleRemarkSamplingRatio = 5 {product}
double CMSSmallCoalSurplusPercent = 1.050000 {product}
double CMSSmallSplitSurplusPercent = 1.100000 {product}
uintx CMSTriggerRatio = 80 {product}
uintx CMSWorkQueueDrainThreshold = 10 {product}
uintx CMS_SweepTimerThresholdMillis = 10 {product}
intx CompileThreshold = 10000 {pd product}
intx G1ConcRefinementThresholdStep = 0 {product}
uintx G1ConfidencePercent = 50 {product}
uintx G1HeapWastePercent = 5 {product}
intx G1RSetUpdatingPauseTimePercent = 10 {product}
uintx G1ReservePercent = 10 {product}
uintx G1SATBBufferEnqueueingThresholdPercent = 60 {product}
uintx GCLockerEdenExpansionPercent = 5 {product}
uintx GCTimeRatio = 99 {product}
uintx IncreaseFirstTierCompileThresholdAt = 50 {product}
uintx InitialSurvivorRatio = 8 {product}
uintx InitialTenuringThreshold = 7 {product}
uintx InitiatingHeapOccupancyPercent = 45 {product}
intx InterpreterProfilePercentage = 33 {product}
uintx LargePageHeapSizeThreshold = 134217728 {product}
uintx MarkSweepDeadRatio = 1 {product}
uintx MaxHeapFreeRatio = 100 {manageable}
uintx MaxMetaspaceFreeRatio = 70 {product}
uintx MaxTenuringThreshold = 15 {product}
uintx MinHeapFreeRatio = 0 {manageable}
intx MinInliningThreshold = 250 {product}
uintx MinMetaspaceFreeRatio = 40 {product}
uintx MinSurvivorRatio = 3 {product}
uintx NewRatio = 2 {product}
intx OnStackReplacePercentage = 140 {pd product}
uintx PretenureSizeThreshold = 0 {product}
intx ProfileMaturityPercentage = 20 {product}
uintx StringDeduplicationAgeThreshold = 3 {product}
uintx SurvivorRatio = 8 {product}
uintx TLABWasteTargetPercent = 1 {product}
uintx TargetSurvivorRatio = 50 {product}
uintx ThresholdTolerance = 10 {product}
intx Tier0ProfilingStartPercentage = 200 {product}
intx Tier2BackEdgeThreshold = 0 {product}
intx Tier2CompileThreshold = 0 {product}
intx Tier3BackEdgeThreshold = 60000 {product}
intx Tier3CompileThreshold = 2000 {product}
intx Tier3InvocationThreshold = 200 {product}
intx Tier3MinInvocationThreshold = 100 {product}
intx Tier4BackEdgeThreshold = 40000 {product}
intx Tier4CompileThreshold = 15000 {product}
intx Tier4InvocationThreshold = 5000 {product}
intx Tier4MinInvocationThreshold = 600 {product}
intx TypeProfileMajorReceiverPercent = 90 {C2 product}
java version "1.8.0_72"
Java(TM) SE Runtime Environment (build 1.8.0_72-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.72-b15, mixed mode)
1 ответ
GCTimeRatio
это тот, который вы ищете, он имеет другое значение по умолчанию, когда вы фактически указываете G1. В общем PringFlagsFinal
должны быть добавлены к вашей фактической командной строке, потому что некоторые флаги могут влиять на значения по умолчанию других.
Что управляет эргономикой GC, описано в официальных документах, вы должны прочитать их, прежде чем приступать к настройке GC.