java – 64位JVM限制为300GB内存?

我试图在集群计算环境(运行CentOS版本6.2 Final的IBM LSF)上运行一个Java应用程序,它可以为我提供高达1TB的RAM空间。

我可以创建一个具有高达300GB的最大内存(Xmx)的JVM,虽然我需要更多的内存(如果需要我可以提供细节)。

但是,使用Xmx选项创建一个拥有超过300GB最大内存的JVM似乎是不可能的。更具体地说,我得到经典的错误消息:

Error occurred during initialization of VM.

Could not reserve enough space for object heap.

我的(64位)JVM的详细信息如下:

OpenJDK Runtime Environment (IcedTea6 1.10.6) (rhel-1.43.1.10.6.el6_2-x86_64)

OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)

我也试过一个Java 7 64位JVM,但我有完全相同的问题。

此外,我试图创建一个JVM来运行一个HelloWorld.jar,但如果你要求超过-Xmx300G,仍然JVM创建失败,所以我不认为它与具体的应用程序有任何关系。

有谁知道为什么我不能创建一个超过300G的最大内存的JVM?

任何人都可以建议一个解决方案/解决方法?

我可以想到几个可能的解释:

>您系统上的其他应用程序使用如此多的内存,现在没有300Gb可用。
>每进程内存大小可能有资源限制。你可以使用ulimit检查这个。 (请注意,根据this bug,如果每进程资源限制停止JVM分配堆区域,您将收到错误消息。)
>这也可能是一个“过度提交”问题;例如如果你的应用程序在虚拟运行,并且系统作为一个整体不能满足需求,因为有来自其他虚拟机的太多竞争。

建议的几个其他想法是(IMO)不太可能:

>切换JRE不会有什么区别。我从来没有听说过或看到在特定的64位JVM的任意内存限制。
>它不可能是由于没有足够的连续内存。当然不需要连续的物理内存。唯一的可能性是交换设备上的连续空间,但我不记得是典型Linux操作系统的问题。

Can anyone please suggest a solution/workaround?

>检查ulimit。
>写一个微小的C程序,试图malloc大量的内存,看看可以分配多少,在失败之前。
>请系统(或管理程序)管理员寻求帮助。

http://stackoverflow.com/questions/22711247/64-bit-jvm-limited-to-300gb-of-memory

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – 64位JVM限制为300GB内存?