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

jcr*_*ey3 12 java linux 64-bit tomcat

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

如果你已经这样做了,你能分享一下你的经历吗?你在生产中运行64位JVM吗?你会建议留在Java 5,还是可以同时转向Java 6 64位?我们是否应该期待性能问题,无论是好还是坏?我们应该关注回归测试的任何特定领域吗?

谢谢你的任何提示!

Sea*_*iff 9

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

当我们迁移到64位时,我预计运行64位JVM会出现一些问题,但实际上还没有.内存不足的情况更难调试,因为堆转储要大得多.在Java服务包装需要一些修改,以支持更大的堆大小.

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


eri*_*son 6

我们使用64位JVM,其堆大约为40 Gb.在我们的应用程序中,大量数据被缓存,导致大量"旧"代.默认的垃圾收集设置不能很好地工作,需要在生产中进行一些痛苦的调整.经验教训:确保在扩展之前有足够的负载测试基础设施.也就是说,一旦我们解决了问题,GC的表现一直很好.

  • 如果您有结果或意见要分享,我想听听您对垃圾收集器调整的更多结果吗?这是Sun JVM? (3认同)

Var*_*han 5

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