大規模な実験の一環として、クラスタ上でNetLogo(Javaシミュレーションフレームワーク)シミュレーションを実行しようとしています。私は、(比較的)シンプルなシミュレーションの大量のメモリ要求に驚いていました。クラスタ上では、 "-Xmx2500M"がheapsizeよりも小さいものについては、 "java.lang.OutOfMemoryError:Java heap space"例外がスローされます。 1回の実行には5時間かかります。 Mac(iMacとMacBook Pro)の両方で同じテストを実行したところ、1時間以内に実行され、「-Xmx1024」はエラーが発生しませんでした。クラスタジョブでは「-XX:MaxPermSize = 250M」が必要ですが、Macではデフォルトを上回らないようにしてください。同じコードを入力しましたが、すべてのケースで同じジャーを使いました。同じプログラム、同じJVMですが、異なるマシン上でのメモリ要件と実行時間が大きく異なります - なぜですか?
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、同じ巨大なメモリと実行時間の問題で、クラスタ上で実行しようとしました。
私は完全に困惑しています。私はこれを説明することはできません。誰もそこに出てきたのですか?どのような助けが大いに感謝!
おそらく、-XX:+ HeapDumpOnOutOfMemoryErrorでヒープダンプを作成し、次にMATなどを使用してメモリを使い果たしているかどうかを確認する必要があります。 –
私はVisualVMやYourKitのような商用メモリプロファイラを使用します。 –
は2つの異なるjvmバージョンを持っているように私に見えます。あなたの問題だと言っているわけではありませんが、それは貢献する可能性があります。 – Matt