Sto provando a eseguire una simulazione NetLogo (un framework di simulazione Java) su un cluster come parte di un esperimento di grandi dimensioni. Sono rimasto sorpreso dall'apparente richiesta di memoria di una (relativamente) semplice simulazione. Sul cluster lancia "ammassi java.lang.OutOfMemoryError: Java heap" per qualcosa di diverso da "-Xmx2500M" heapsizes. Una singola esecuzione richiede 5 ore per essere eseguita. Ho eseguito lo stesso esperimento su entrambi i miei Mac (iMac e MacBook Pro) e sono stati eseguiti in meno di un'ora, con "-Xmx1024" senza errori. I lavori del cluster richiedono "-XX: MaxPermSize = 250M" mentre sui miei Mac non è necessario aumentare di sopra del valore predefinito. Ho eseguito lo stesso codice, gli stessi input, usando sempre gli stessi giare in tutti i casi.Stesso programma, stessa JVM, ma requisiti di memoria e tempi di esecuzione molto diversi su macchine diverse - perché?
64 JVM bit vengono utilizzati in ogni singolo caso (e per quanto ne so questi sono piuttosto simili):
<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)
E io sono in esecuzione client JVM in tutti i casi (è stato inizialmente utilizzando Server in cluster, il passaggio al cliente non ha fatto differenza). Ho provato ad eseguire sul cluster con java 7, la stessa memoria enorme e problemi di tempo di esecuzione.
Sono completamente perplesso, nessuno con cui ho parlato può spiegare questo. Qualcuno là fuori si imbatte in questo prima? Qualsiasi aiuto molto apprezzato!
Forse dovresti creare un dump dell'heap con -XX: + HeapDumpOnOutOfMemoryError e quindi usare MAT o simili per vedere cosa sta consumando la memoria. –
Vorrei utilizzare VisualVM o un profiler di memoria commerciale come YourKit. –
mi sembra che tu abbia anche due diverse versioni di jvm. Non dire che è il tuo problema, ma potrebbe contribuire. – Matt