我需要build立一个Oracle GlassFish服务器 ,经过一番研究,我想出了一个我想提出的configuration。 任何build议和/或更正是非常受欢迎的。
Q1 – 有些人认为33%(- -XX:NewRatio=3
)会导致-XX:NewRatio=3
克伊甸园 。 这对于GC(有18个线程)来说不是太大的空间吗?
Q2 – 我无法find一个好的价值。
Q3 – 这是默认比例。 有人说这个选项不会改变性能。
Q4 – 与Q3相同。
Q5 – 不知道什么会是一个很好的价值。
您应该添加JVM / GC日志logging选项,这将允许您跟踪GC活动,并将帮助您确定Q1,Q3,Q4,Q5的最佳值。 此外,GC日志logging几乎没有开销,因此您可以在生产环境中安全地使用它:
通过以下方式启用JVM / GC日志logging : -XX:+PrintTenuringDistribution -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log -XX:+HeapDumpOnOutOfMemoryError -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -showversion
Q1:如果您认为总堆大小为9GB,则3GB不会太大YounGen大小。 您需要检查GC日志以查看最佳大小。
Q2:这大概够用了,还可以testing-Xss256k
。
问题3:除非使用-XX-UseAdaptiveSizePolicy
,否则-XX:SurvivorRatio
选项将被忽略,这就是为什么人们看不到此选项的效果。 还考虑-XX:TargetSurvivorRatio=90
-XX:InitialSurvivorRatio=3
和-XX:TargetSurvivorRatio=90
。 但要小心禁用自适应大小,只有当你知道你在做什么时才这样做。
Q4:虽然我没有看到效果,但这是一个正确的值。 GC可能决定提前推广这些对象。 使用-XX:+PrintTenuringDistribution
来监控这个。
问题5:您可以从GC日志中确定这将显示您的PermGen职业。
您可以考虑的其他参数 :
-XX:+AggressiveOpts
-XX:+PrintClassHistogramBeforeFullGC -XX:+PrintClassHistogramAfterFullGC
debuggingGC问题 -XX:-UseBiasedLocking
– 通常build议在应用程序服务器上禁用偏向locking -XX:+UseLargePages
– 这将有助于您的performance,但是您也需要在操作系统中进行configuration。 Java Performance书中提供了一些有用的提示。