为高分配率调整 JVM
Tuning JVM for High Allocation Rate
我正在尝试调整我的应用程序,主要是为了减少 "spread" 响应时间。平均值还好,就是范围太宽了。
Dynatrace 表明响应时间越长,暂停时间越长。这指向GC。
我尝试根据在线阅读更改一些 JVM GC 值,但收效甚微。
根据 GC 日志,我计算出分配率约为 324 MB/s,而提升率仅为 0.85 MB/s。对我来说这似乎有很高的分配率,所以我尝试增加年轻一代的大小。
第一个截图是默认的Java8个设置,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
在调整 GC 之前,您应该首先使用内存分析器尝试降低分配率。
您可以尝试进一步增加年轻一代,例如您可以设置 -Xmn2g -Xmx3g
而不是设置 NewRatio。
I've figured the Allocation Rate to be about 324 MB/s,
对于 Web 应用程序,这是中等速率。它可能会更低,但我不希望在这个级别出现重大问题。
我会从一个更大的堆开始,这取决于你的机器有多少内存,例如-Xmn24g -Xmx32g
并查看暂停时间。然后减小堆大小,直到它似乎影响 GC 时间(它们甚至可能变得更短)。
另一种看待它的方式;您可能会发现每 2 到 10 秒进行一次次要 GC 是可以接受的。这意味着您需要 650 MB 到 3.2 GB 的 Eden space。
我正在尝试调整我的应用程序,主要是为了减少 "spread" 响应时间。平均值还好,就是范围太宽了。
Dynatrace 表明响应时间越长,暂停时间越长。这指向GC。
我尝试根据在线阅读更改一些 JVM GC 值,但收效甚微。
根据 GC 日志,我计算出分配率约为 324 MB/s,而提升率仅为 0.85 MB/s。对我来说这似乎有很高的分配率,所以我尝试增加年轻一代的大小。
第一个截图是默认的Java8个设置,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
在调整 GC 之前,您应该首先使用内存分析器尝试降低分配率。
您可以尝试进一步增加年轻一代,例如您可以设置 -Xmn2g -Xmx3g
而不是设置 NewRatio。
I've figured the Allocation Rate to be about 324 MB/s,
对于 Web 应用程序,这是中等速率。它可能会更低,但我不希望在这个级别出现重大问题。
我会从一个更大的堆开始,这取决于你的机器有多少内存,例如-Xmn24g -Xmx32g
并查看暂停时间。然后减小堆大小,直到它似乎影响 GC 时间(它们甚至可能变得更短)。
另一种看待它的方式;您可能会发现每 2 到 10 秒进行一次次要 GC 是可以接受的。这意味着您需要 650 MB 到 3.2 GB 的 Eden space。