Ich versuche, eine NetLogo (ein Java Simulation Framework) -Simulation auf einem Cluster als Teil eines großen Experiments auszuführen. Ich war überrascht von dem scheinbar massiven Speicherbedarf einer (relativ) einfachen Simulation. Auf dem Cluster werden die Ausnahmen "java.lang.OutOfMemoryError: Java heap space" für weniger als "-Xmx2500M" hoepsizes ausgelöst. Eine einzelne Ausführung dauert 5 Stunden. Ich habe das gleiche Experiment auf beiden Macs (iMac und MacBook Pro) ausgeführt, und sie wurden in weniger als einer Stunde ausgeführt, wobei "-Xmx1024" keine Fehler verursachte. Die Cluster-Jobs benötigen "-XX: MaxPermSize = 250M", während auf meinen Macs keine Erhöhung über den Standardwert hinaus erforderlich ist. Ich habe den gleichen Code, die gleichen Eingaben, unter Verwendung der genau gleichen Gläser in allen Fällen.Gleiches Programm, gleiche JVM, aber sehr unterschiedliche Speicheranforderungen und Ausführungszeiten auf verschiedenen Maschinen - warum?
64-Bit-JVMs sind jeweils (und soweit ich weiß, dass diese ziemlich ähnlich sind) verwendet:
<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)
Und ich bin mit Client-JVM in allen Fällen (wurde ursprünglich Server auf Cluster mit Schalt für den Kunden keinen Unterschied gemacht). Ich habe versucht, auf dem Cluster mit Java 7, gleichen großen Speicher und Ausführungszeit Probleme.
Ich bin völlig perplex, niemand, mit dem ich gesprochen habe, kann dies erklären. Ist jemand da draußen schon einmal da? Jede Hilfe sehr geschätzt!
Vielleicht sollten Sie einen Heap-Dump mit -XX erstellen: + HeapDumpOnOutOfMemoryError und dann mit MAT oder ähnlichem, um zu sehen, was den Speicher verbraucht. –
Ich würde VisualVM oder einen kommerziellen Speicherprofiler wie YourKit verwenden. –
sieht für mich aus, als ob Sie auch zwei verschiedene jvm-Versionen haben. Nicht zu sagen, es ist dein Problem, aber es könnte dazu beitragen. – Matt