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

Posted

技术标签:

【中文标题】在 64 位 Linux 服务器上运行 64 位 JVM 的优点/缺点?【英文标题】:Benefits/drawbacks to running 64-bit JVM on 64-bit Linux server? 【发布时间】:2010-10-08 05:58:36 【问题描述】:

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

如果您已经这样做了,请分享您的经验吗?您是否在生产中运行 64 位 JVM?您会建议继续使用 Java 5,还是可以同时迁移到 Java 6 64 位?我们应该期待性能问题,更好还是更糟?是否有任何特定的领域需要我们关注回归测试?

感谢任何提示!

【问题讨论】:

【参考方案1】:

从 JDK5 32 位(Windows 服务器)迁移到 JDK6 64 位后,“perm gen space”内存块出现泄漏。使用JDK参数后,它得到了解决。希望你比我们幸运。

【讨论】:

嗨,我很想了解更多关于您为解决 PermGen 空间问题而调整的参数。我有一个在 32 位 Windows 中运行良好的应用程序,但在 RedHat 64 位中的 PermGen 空间内存不足。谢谢。【参考方案2】:

如果您使用 numactl --show 您可以查看服务器中内存库的大小。 我发现 GC 在使用多个内存库时无法很好地扩展。恕我直言,这更像是硬件而不是软件问题,但它会影响您的 GC 时间。

【讨论】:

【参考方案3】:

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

【讨论】:

另外,是不是需要重新编译【参考方案4】:

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

【讨论】:

很久以前我在 Tanukisoftware 的 Wrapper 中进行了此更改。他们的网页似乎表明他们现在有 64 位二进制文​​件可供下载。也许我会更新到最新版本。谢谢!【参考方案5】:

我们使用 64 位 JVM,堆大小约为 40 Gb。在我们的应用程序中,大量数据被缓存,从而产生了大量的“老”代。默认垃圾收集设置效果不佳,需要在生产中进行一些痛苦的调整。教训:在像这样扩展之前确保你有足够的负载测试基础设施。也就是说,一旦我们解决了问题,GC 性能就非常好。

【讨论】:

如果您有结果或意见要分享,我想听听更多关于垃圾收集器调整的发现?这是 Sun JVM?【参考方案6】:

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

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

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

【讨论】:

以上是关于在 64 位 Linux 服务器上运行 64 位 JVM 的优点/缺点?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 cx_Freeze 在 64 位 Debian Linux 上运行时使 32 位可执行?

你能在64位安装中运行32位Cygwin应用程序吗?

如何在 Linux 上超过 64 位 LuaJIT 的 1gb 内存限制?

如何为在 64 位 Amazon Linux 2 上运行的 Elastic Beanstalk Python 3.7 项目安装节点包?

在 64 位操作系统上以 32 位和 64 位运行 IIS 的优缺点是啥?

在运行 64 位 linux 的 Armv8 (aarch64) 上编译并运行 32 位二进制文​​件