【发布时间】:2016-06-02 22:42:36
【问题描述】:
详细日志显示每 7 秒发生一次 Full GC -
], 7.3933980 secs] [Times: user=89.17 sys=1.16, real=7.39 secs] 79959.910:[全GC [PSYOUNGGEN:390144K-> 194442K(451584K)] [1572852K - > 1572852K(1572864K)] 1962798K-> 1767294K(2024448K)[Pspermgen:103569K-> 103569K(103936K),7.9599570秒] [时间:user=95.28 sys=1.09, real=7.96 secs] 79984.776:[全GC [PSYOUNGGEN:390144K-> 196124K(451584K)] [1572864K-> 1572544K(1572864K)] 1962996K-> 1768668K(2024448K)[PSPermgen:103569K-> 103569K(103936K),7.6023130秒] [时间:用户=91.82 系统=1.22,真实=7.60 秒] 80007.996:[PSYOUNGGEN:390144K-> 194969K(451584K)] [帕尔林:157254K-> 1572734K(1572864K)1962688K-> 1767703K(2024448K)[Pspermgen:103569K-> 103569K(103936K),8.0980790秒] [时间:user=98.03 sys=1.28, real=8.10 secs]我在 Linux 上使用这个 JVM 参数和 Oracle 热点 64 位,RAM 大小为 30688332 KB 和 java 版本 1.7.0_91-
-server -Xmx2048m -Xms2048m -XX:NewRatio=3 -XX:MaxPermSize=512m -XX:+UseParallelGC -Djava.awt.headless=true
我尝试将 NewRatio 更改为 2 或 3 并将 Xmx 更改为
详细的 gc 日志显示老年代正在努力重新分配内存。下一步应该是什么?请推荐!
【问题讨论】:
-
如果您需要更多 RAM,则需要更多 RAM。您的应用程序要么非常消耗内存,要么存在内存泄漏。启动 JVisualVM,分析内存分配,找出它是什么。
-
第一步始终是生成堆转储并弄清楚发生了什么。
-
分析您的应用程序,找到分配发生的位置并减少分配。
-
如果你的机器有 30 GB,默认的 JVM 大小是这个的 1/4。即〜8 GB。由于您已经调低了内存量并且看起来这还不够,我会尝试增加最大大小或根本不设置它。我还会尝试删除 NewRatio 并在再次设置之前设置它的运行方式。注意:您的旧代已满 99.98%。
-
您的 permgen 看起来不错,因为只使用了 103 MB。
标签: java performance memory-leaks garbage-collection jvm