调整JVM以获得高分配率

Bob*_*bby 7 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

在此输入图像描述 在此输入图像描述

Pet*_*rey 4

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

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

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

对于 Web 应用程序来说,这是中等的速率。它可能会更低,但我预计在这个水平上不会出现重大问题。

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

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