使用 VisualVM,我在 JBoss 服务器上观察到以下堆使用情况:
服务器使用以下(相关)JVM 选项启动:
-Xrs -Xms3072m -Xmx3072m -XX:MaxPermSize=512m -XX:+UseParallelOldGC -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000
我们目前还启用了 GC 日志记录:
-XX:+PrintGC -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:log\gc.log
基本上我对观察到的模式很满意,因为看起来我们没有任何内存泄漏(这种模式会在几天内重复出现)。
但是我想知道是否有优化空间?
首先,我不明白为什么当堆使用量达到大约 2GB 时垃圾收集已经开始了?在我看来,它可能会在以后启动,因为堆将有 3GB 可用?
此外,我会对有关观察到的堆使用模式和使用的 JVM 选项的提示感兴趣:
观察到的模式是否允许我得出关于使用的 GC 策略 (UseParallelOldGC) 的结论?这个策略是正确的,还是应该考虑到观察到的堆使用情况尝试使用另一种策略?
我可以优化 GC 过程,以便使用完整的堆大小(3GB)吗?
现在看起来完整的 3GB 从未使用过,我应该将 Xms/Xmx 减少到 2.5GB 吗?
我是否缺少任何明显的 GC 优化?喜欢调整 -XX:NewSize 还是 -XX:NewRatio?
还有什么其他的提示吗?
谢谢!