gpt4 book ai didi

java - 优化 Xms/Xmx/XX :MaxPermSize in JVM

转载 作者:搜寻专家 更新时间:2023-11-01 02:12:49 25 4
gpt4 key购买 nike

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

当然我可以设置一个大的值,但正如你所知,GC 在大内存中需要时间。当我有时间测试和发现这些值(value)时,一般建议是什么

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

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

最佳答案

在调整 GC 时,您需要收集较长时间段内的 GC 统计信息,然后据此采取行动。仅仅一个世代大小的快照是不够的。

你应该:

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

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

  3. 计算:

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

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

  • Old Gen = 1.5-2 倍的实时数据集 - 您的数据集应该很适合 OldGen 空间。
  • Perm Gen = 通常 PermGen 职业的 1.5 倍。
  • 年轻一代 = 基于分配率。看你一秒分配多少,再看Promotion rate,通过增加YoungGen降低promotion rate。
  • Survivor Spaces = 监控 Tenuring 阈值和晋升率。

一般来说,大小建议取决于您的调整目标:

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

另请参阅 GC 调优问题:Is there a cookbook guide for GC problems?

关于java - 优化 Xms/Xmx/XX :MaxPermSize in JVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14230746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com