【问题标题】:Optimizing Xms/Xmx/XX:MaxPermSize in JVM在 JVM 中优化 Xms/Xmx/XX:MaxPermSize
【发布时间】:2013-01-09 08:08:18
【问题描述】:

获得Xms/Xmx/XX:MaxPermSize 的优化值的必要步骤是什么?

当然,我可以设置一个很大的值,但正如您所知,GC 在大内存中需要时间。当我可以抽出时间进行测试并找到这些价值时,一般建议是什么

例如,下面的数字有帮助吗?

Eden Space heap usage - 42MB / 62MB (used / committed)
Survivor Space heap usage - 8.5MB / 8.5MB (used / committed)
CMS Old Gen heap usage - 100MB / 217MB  (used / committed)
Non-heap memory pool usage - 36MB

【问题讨论】:

标签: java jakarta-ee garbage-collection jvm


【解决方案1】:

在调整 GC 时,您需要收集较长时间的 GC 统计信息,然后采取行动。仅一张生成大小的快照是不够的。

你应该:

  1. 启用完整 GC 日志记录。轻巧而强大。

    • 使用-XX:+PrintTenuringDistribution -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log -XX:+HeapDumpOnOutOfMemoryError -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -showversion
  2. 考虑收集有关您的 GC 信息的其他方法。日志记录很好,但有时有可用的轻量级命令行工具可以让您获得更多洞察力。例如。 jstat 用于 Hotspot,它将显示 Eden、Survivor 和 Old Gen 的职业/容量。

  3. 计算:

    • 实时数据集分配率推广率。这将告诉您是否需要更大的堆或您的例如。 Young Gen 太小,或者你的 Survivor 空间溢出等等。
    • 总 GC 时间,应该小于总运行时间的 5%。这样您就可以判断您的整体 GC 策略是否有效。
    • 观察 Perm Gen 的职业

获得这些数据后,您就可以开始调整世代的规模,并再次监控所做更改的影响。吞吐量的通常大小建议是:

  • Old Gen = Live Data Set 的 1.5-2 倍 - 您的数据集应该很适合 OldGen 空间。
  • Perm Gen = 通常 PermGen 占用的 1.5 倍。
  • 年轻一代 = 基于分配率。看看你一秒钟分配了多少,然后看提升率,通过增加YoungGen来降低提升率。
  • Survivor Spaces = 监控 Tenuring 阈值和晋升率。

一般而言,尺寸建议取决于您的调整目标:

  • 吞吐量调整 - 见上文,
  • 低延迟调整 - 监控 GC 暂停
    • Young GC 太长 => 减少年轻代
    • Young GC 过于频繁 => 增加年轻代
  • Footprint Tuning - 根据 LiveDataSet、Promotion Rate 和 Allocation Rate 调整大小。您可能不需要像吞吐量调整中那样为每个空间添加额外的空间

另见 GC 调优问题:Is there a cookbook guide for GC problems?

【讨论】:

    【解决方案2】:

    一般规则是,在发现需要解决的问题之前,不应更改 JVM 内存设置。 JVM 在调整运行时的大多数参数以适合您的应用程序方面做得非常好。

    如果您发现需要优化内存参数,则取决于您需要优化的内容。您将使用的设置会因需要优化的方面而有很大差异(例如,最小化暂停的设置与最大化吞吐量的设置非常不同)。

    如果您确实需要优化,请提供更多关于您需要优化的方面的信息。

    【讨论】:

      【解决方案3】:

      在我需要调整这些值的罕见情况下,有一个名为JavaVisualVM 的程序包含在 jdk(我认为是 bin 文件夹)中,我觉得它非常有用。您可以连接到正在运行的虚拟机并分析其所有运行时参数。

      在“插件”部分下,您还可以找到一个非常有用的插件,用于监控 gc,您可以在其中查看到底发生了什么。

      【讨论】:

        猜你喜欢
        • 2012-08-01
        • 2013-01-23
        • 2011-09-03
        • 1970-01-01
        • 1970-01-01
        • 2011-11-19
        相关资源
        最近更新 更多