Glassfish 服务器 JVM 调优

Glassfish 服务器 JVM 调优

我需要设置一个Oracle Glassfish 服务器经过一番研究,我提出了一个配置方案。欢迎提出任何建议和/或更正。

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

  • Ubuntu 12.04 LTS 64 位
  • JDK 7.0.28
  • 内存 12GB
  • 4处理器(每根 6 芯)

我的 JVM 选项

  • -服务器
  • -Xms9g
  • -Xmn1g (问题 1
  • -Xmx9g
  • -Xss128k(第二季度
  • -XX:+UseCompressedOops
  • -XX:+DisableExplicitGC
  • -XX:+UseConcMarkSweepGC
  • -XX:ParallelGCThreads=18
  • -XX:+使用并行旧GC
  • -XX:幸存者比例=8(第三季度
  • -XX:最大阈值=15(Q4
  • -XX:MaxPermSize=1g(问5
  • -XX:永久大小=512m

问题 1- 有人建议 33% ( -XX:NewRatio=3) 的比例,这样可以得到 3g伊甸园。对于 GC(具有 18 个线程)来说,这个空间是不是太大了,难以清理?

第二季度- 我找不到一个好的值。

第三季度- 这是默认比例。有人说这个选项不会改变性能。

Q4- 与问题 3 相同。

问5- 不知道这个值是多少。

答案1

您应该添加 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

问题 1:如果总堆大小为 9GB,那么 3GB 的 YounGen 大小并不算太大。您需要检查 GC 日志以查看最佳大小。

问题2: 这大概就足够了,你也可以测试一下-Xss256k

问题3:-XX:SurvivorRatio除非您使用 ,否则将忽略该选项-XX-UseAdaptiveSizePolicy,这就是人们看不到此选项效果的原因。还请考虑-XX:InitialSurvivorRatio=3-XX:TargetSurvivorRatio=90。但请谨慎禁用自适应尺寸,并且只有当您知道自己在做什么时才这样做。

问题4:这是一个正确的值,尽管我还没有看到它的效果。GC 可能会决定更早地提升对象。用于-XX:+PrintTenuringDistribution监视这一点。

问题5:您可以从显示 PermGen 占用情况的 GC 日志中确定这一点。

其他参数您可以考虑:

  • -XX:+AggressiveOpts
  • -XX:+PrintClassHistogramBeforeFullGC -XX:+PrintClassHistogramAfterFullGC用于调试 GC 问题
  • -XX:-UseBiasedLocking- 通常建议应用服务器禁用偏向锁
  • -XX:+UseLargePages- 这将有助于提高您的性能,但您也需要在操作系统中进行配置。

一些有用的提示可以在Java 性能书。

相关内容