调整JVM以获得高分配率

时间:2016-05-03 15:14:51

标签: java performance garbage-collection jvm dynatrace

我正在尝试调整我的应用程序主要是为了减少响应时间的“传播”。平均值很好,但范围太广。

Dynatrace表明,较高的响应时间与较长的悬浮时间相关。这指向GC。

我尝试过根据在线阅读更改一些JVM GC值,但收效甚微。

根据GC日志,我认为分配率约为324 MB / s,促销率仅为0.85 MB / 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 个答案:

答案 0 :(得分:4)

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

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

  

我认为分配率约为324 MB / s,

这是Web应用程序的适中率。它可能会更低但我不希望在这个级别上出现重大问题。

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

另一种看待它的方式;您可能会发现每2到10秒钟就有一个次要GC是可以接受的。这意味着您需要一个650 MB到3.2 GB的Eden空间。

相关问题