代码之家  ›  专栏  ›  技术社区  ›  Bobby

调整JVM以实现高分配率

  •  7
  • Bobby  · 技术社区  · 10 年前

    我试图调整我的应用程序,主要是为了减少响应时间的“分散”。平均值很好,但范围太宽。

    Dynatrace显示,较高的反应时间与较长的暂停时间有关。这指向GC。

    我尝试过基于在线阅读更改一些JVMGC值,但没有成功。

    根据GC日志,我计算出分配速率约为324MB/s,提升速率仅为0.85MB/s。在我看来,这似乎有一个非常高的分配率,所以我试图增加年轻一代的规模。

    第一个屏幕截图是默认的Java 8设置,1024MB Xmx。

    第二个屏幕截图是将NewRatio设置为1。

    任何关于下一步尝试的建议都将不胜感激。

    我已经尝试过:更改为G1GC,设置NewRatio=1,设置NewRatio=1并将Xmx增加到2048,设置NewSize=1600m和Xmx=2048,设置MetaspaceSize=100

    编辑: 添加GC日志: http://pastebin.com/VhJwSuxv

    注:这些日志来自10分钟测试,更改为:NewRatio=1

    enter image description here enter image description here

    1 回复  |  直到 10 年前
        1
  •  4
  •   Peter Lawrey    10 年前

    在调优GC之前,应该首先使用内存分析器来尝试降低分配率。

    你可以尝试进一步增加年轻一代,例如,你可以 -Xmn2g -Xmx3g 而不是设置NewRatio。

    我估计分配率约为324 MB/s,

    这是web应用程序的中等速率。它可能会更低,但我预计在这个级别上不会出现重大问题。

    我会从一个更大的堆开始,这取决于你的机器有多大的内存。 -Xmn24g -Xmx32g 并查看暂停时间。然后减小堆大小,直到它似乎影响GC时间(它们甚至可能变得更短)。

    从另一个角度来看;您可能会发现每隔2到10秒进行一次小型GC是可以接受的。这意味着您需要650 MB到3.2 GB的Eden空间。