在64位Linux服务器上运行64位JVM的好处/缺点?

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

如果你已经这样做了,你能分享一下你的经验吗? 你在运行64位的JVM吗? 你会build议留在Java 5,还是可以同时移动到Java 6 64位? 我们是否应该期望性能问题,无论好还是坏? 有什么特别的地方应该关注我们的回归testing吗?

感谢您的任何提示!

Solutions Collecting From Web of "在64位Linux服务器上运行64位JVM的好处/缺点?"

在开普勒科学运营中心,我们有大约50台机器,每台32-64G。 JVM堆通常是7-20G。 我们正在使用Java 6.操作系统有Linux 2.6内核。

当我们迁移到64位时,我预计运行64位JVM会遇到一些问题,但实际上还没有。 由于堆转储非常大,内存不足的情况更难以调试。 Java服务包装器需要一些修改来支持更大的堆大小。

网上有一些网站声称GC不能很好地扩展到2G,但是我没有看到任何问题。 最后,我们正在进行吞吐量密集的交互密集计算。 我从来没有看过延迟差异; 我的猜测是最坏的情况GC堆栈的大小会延长GC延迟时间。

我们使用一个64位JVM,堆大小约为40 Gb。 在我们的应用程序中,大量的数据被缓存,导致一个大的“旧”一代。 默认的垃圾收集设置不能正常工作,需要在生产中进行一些痛苦的调整。 课程:确保您有足够的负载测试基础架构,然后按照这种方式进行扩展。 也就是说,一旦我们找到了解决办法,GC的性能就非常好。

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

你所编写的任何JNI代码假设它是以32位运行的,都需要重新测试。 对于您可能遇到的问题,您可能会将c代码从32位移植到64位,请参阅此链接。 这不是特定于JNI,但仍然适用。 http://www.ibm.com/developerworks/library/l-port64.html

从JDK5 32位(Windows服务器)迁移到JDK6 64位后,我们在“perm gen space”内存块中泄漏。 在玩JDK参数后,它已经解决了。 希望你会比我们更幸运。

如果您使用numactl –show,您可以看到服务器中内存组的大小。 我发现GC在使用多个存储体时不能很好地扩展。 这是一个比软件问题更多的硬件恕我直言,但它可以影响你所有的GC时间。