在64位Linux服务器上运行64位JVM的优缺点是什么?

12

我们在64位Linux 2.6服务器上运行32位的Sun Java 5 JVM,但显然这限制了每个进程的最大内存为2GB。因此,建议我们升级到64位JVM以消除这个限制。我们目前在一个服务器上运行多个JVM(Tomcat实例),以保持在2GB限制以下,但出于简化部署的考虑,我们希望将它们合并。

如果您已经做过这个,能否分享一下您的经验?您是否正在生产中运行64位JVM?您是否建议继续使用Java 5,或者同时转移到Java 6和64位?我们应该预计性能问题,无论是更好还是更差?有没有什么特别的领域需要我们专注于回归测试?

感谢任何提示!

6个回答

9
Kepler 科学操作中心,我们有大约50台机器,每台机器配置32-64G内存。JVM堆通常为7-20G,使用的是Java 6。操作系统为Linux 2.6内核。
当我们迁移到64位时,我认为会出现一些运行64位JVM的问题,但实际上并没有。由于堆转储文件变得更大,内存不足的情况更难以调试。需要对Java Service Wrapper进行修改以支持更大的堆内存大小。
有一些网站声称GC在超过2G后无法很好地扩展,但我没有遇到任何问题。最后,我们进行高吞吐量而非交互性计算。我从未关注过延迟差异;我的猜测是,在更大的堆内存大小下,最坏情况下的GC延迟会更长。

6

我们使用64位的JVM,堆大小约为40GB。在我们的应用程序中,有很多数据被缓存,导致大量的“老年代”存在。默认的垃圾回收设置效果不佳,需要在生产环境中进行痛苦的调整。教训是,在扩展规模之前,请确保您拥有足够的负载测试基础设施。话虽如此,一旦我们解决了问题,GC的性能就非常好。


3
如果您有结果或意见要分享,我很想听听您在垃圾收集器调优方面的发现。这是Sun JVM吗? - Thorbjørn Ravn Andersen

5

我可以证实Sean的经验。我们运行纯Java、计算密集型的Web服务(自制Jetty集成,现在有超过1k个Servlet线程,并且内存中加载了超过6Gb的数据),当我们两年前迁移到64位JVM时,所有应用程序都很好地扩展了。我建议使用最新的Sun JVM,因为在最近的几个版本中,GC开销有了实质性的改进。我也没有遇到Tanukisoftware的Wrapper问题。


我在很久以前就对Tanukisoftware的Wrapper进行了更改。他们的网页似乎表明现在有64位二进制文件可供下载。也许我会更新到最新版本。谢谢! - Sean McCauliff

3

1
此外,它不需要重新编译吗? - Neil Coffey

1

从JDK5 32位(Windows服务器)迁移到JDK6 64位后,我们在“perm gen space”内存块中出现了泄漏问题。经过调整JDK参数后,问题得到解决。希望您比我们更幸运。


1
你好,我对解决PermGen空间问题所调整的参数更感兴趣。我的应用程序在32位Windows上运行良好,但在RedHat 64位上出现了PermGen空间不足的问题。谢谢。 - ThiamTeck

0
如果您使用 numactl --show 命令,您可以查看服务器中内存银行的大小。 我发现当垃圾回收器使用多个内存银行时,它的扩展性不佳。在我看来,这更多是硬件问题而不是软件问题,但它仍然会影响您的垃圾回收时间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接