2009-02-18 100 views
12

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

如果你已经这样做了,你可以分享一下你的经验吗?您是否正在生产64位JVM?你会推荐留在Java 5,还是可以同时移动到Java 6 64位?我们是否应该期待性能问题,无论是更好还是更糟?我们应该关注回归测试吗?

感谢您的任何提示!

回答

9

Kepler科学运营中心,我们有大约50台机器,每台32-64G。 JVM堆一般为7-20G。我们使用Java 6.操作系统具有Linux 2.6内核。

当我们迁移到64位时,我预计运行64位JVM时会出现一些问题,但确实没有。由于堆转储非常大,内存不足情况更难以调试。 Java Service Wrapper需要一些修改来支持更大的堆大小。

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

6

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

+3

如果您有共享的结果或意见,我希望听到更多有关垃圾收集器调整的调查结果?这是Sun JVM? – 2009-02-18 19:08:42

5

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

+0

我很早以前就在Tanukisoftware的Wrapper中做了这个改变。他们的网页似乎表明他们现在有64位二进制文​​件可供下载。也许我会更新到最新版本。谢谢! – 2009-02-18 01:35:12

3

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

+1

此外,是否需要重新编译*? – 2009-02-18 04:59:24

0

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

1

迁移到JDK5从32位JDK6 64位(Windows服务器上)后,我们在“烫发根空间”的内存块了泄漏。玩过JDK参数后,它已解决。希望你会比我们更幸运。

+1

嗨,我很想知道更多关于你调整来解决PermGen空间问题的参数。我有一个在32位Windows上运行正常的应用程序,但在RedHat 64位中存在PermGen空间不足的内存。 谢谢。 – ThiamTeck 2010-06-14 08:20:40