这个文章与 Oracle 的 Hotspot JVM 虚拟机的内存管理为参照的。这些建议是我们在对大的 Confluence 安装实例用户进行咨询服务的时候得到的最佳配置方案。




不要在 Confluence 中使用 Concurrent Mark Sweep (CMS) ,除非你得到了 Atlassian 支持小组的明确说明。这个需要额外的手工调整和测试,通常这个会降低系统的性能。


使用一个小的 heap

在不出现 OutOfMemory 错误的情况下,保持你的 heap 尽可能的小。当你遇到了 OutOfMemory 错误,需要增加 heap 的时候,我们推荐你按照 512MB 到 1 GB 的顺序进行增加。如果你还持续的获得 OutOfMemory 错误,那么你可以考虑再继续增加 512 MB 或者 1GB。你可以持续进行增加,直到你不再出现 OutOfMemory 错误。不要尝试一次增加到位,这样可能会导致垃圾收集时间的增长。

删除所有老的收集参数

只有在完全的 GC 后,JVM 将会重新定义 Eden, Survivor 等参数的大小,这个大小是基于 GC 处理来确定的。这个将会保证 GC 处理程序能够处理真实的垃圾情况和垃圾对象。在绝大部分情况下,能够保证 JVM 为你提供更好的性能。

如果你的 JVM 中添加了参数,当在垃圾收集的时候遇到了困难。那么我们建议你删除掉你在 GC 前添加的参数,除非你添加的这些参数是为了解决一些特定的问题。你现在应该考虑如何避免在 GC 中出现的问题,而不是导致其他的问题。

检查你的虚拟机(VM)资源

如果你运行 Confluence 在一个 VM 上的话,检查这个 VM 没有使用 swap 文件。

如果这个 VM 了使用了 swap 文件,那么当 JVM 进行垃圾收集的时候,将会把这些 swap 文件载入到内存后清理他们,这个将会导致垃圾清理进程的长时间暂停。为了避免使用 swapping, ballooning 和 bursting,将这些信息载入到 VM 的内存中。

手动清理

如果你按照上面的说明进行了操作后还遇到了一些困难,但是你还是希望能够提高系统的性能,我们推荐你使用Garbage Collection (GC) Tuning Guide 页面提供的方法。这个页面将会知道你如何达到你自己期望的性能指标(throughput/footprint/latency)和如何进行调整。

查看你的垃圾收集日志

How to Enable Garbage Collection (GC) Logging 和使用类似  Chewiebug's GCViewer 工具来查看结果的日志。