Glassfish服务器JVM Tunning

我需要build立一个Oracle GlassFish服务器 ,经过一番研究,我想出了一个我想提出的configuration。 任何build议和/或更正是非常受欢迎的。

我的硬件/操作系统(相关)详细信息:

  • Ubuntu 12.04 LTS 64位
  • JDK 7.0.28
  • RAM 12GB
  • 4个处理器 (每个6个核心)

我的JVM选项

  • -服务器
  • -Xms9g
  • -Xmn1g( Q1
  • -Xmx9g
  • -Xss128k( Q2
  • -XX:+ UseCompressedOops
  • -XX:+ DisableExplicitGC
  • -XX:+ UseConcMarkSweepGC
  • -XX:ParallelGCThreads = 18
  • -XX:+ UseParallelOldGC
  • -XX:SurvivorRatio = 8( Q3
  • -XX:MaxTenuringThreshold = 15( Q4
  • -XX:MaxPermSize = 1g( Q5
  • -XX:PermSize =512米

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:+PrintClassHistogramAfterFullGCdebuggingGC问题
  • -XX:-UseBiasedLocking – 通常build议在应用程序服务器上禁用偏向locking
  • -XX:+UseLargePages – 这将有助于您的performance,但是您也需要在操作系统中进行configuration。

Java Performance书中提供了一些有用的提示。