作为大型实验的一部分,我正在尝试在集群上运行NetLogo (Java 模拟框架)模拟。我对(相对)简单的模拟看似庞大的内存需求感到惊讶。在集群上,对于小于“-Xmx2500M”堆大小的任何内容,它都会引发“java.lang.OutOfMemoryError: Java heap space”异常。一次执行需要 5 小时才能运行。我在我的两台 Mac(iMac 和 MacBook Pro)上进行了相同的实验,它们在不到一小时的时间内执行,“-Xmx1024”没有出现错误。集群作业需要“-XX:MaxPermSize=250M”,而在我的 Mac 上,不需要高于默认值。在所有情况下,我使用完全相同的 jar 运行相同的代码、相同的输入。
在每种情况下都使用 64 位 JVM(据我所知,它们非常相似):
<on the cluster>
$ java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
<on my macs>
$ java -version
java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b04-415-10M3646)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01-415, mixed mode)
而且我在所有情况下都在运行客户端 JVM(最初是在集群上使用服务器,切换到客户端没有任何区别)。我曾尝试使用 java 7 在集群上执行,同样巨大的内存和执行时间问题。
我完全感到困惑,与我交谈过的人都无法解释这一点。有没有人以前遇到过这个?非常感谢任何帮助!