Büyük bir denemenin bir parçası olarak bir kümede bir NetLogo (bir java simülasyon çerçevesi) simülasyonunu çalıştırmaya çalışıyorum. (Nispeten) basit bir simülasyonun görünüşte muazzam bellek gereksinimine şaşırdım. Küme üzerinde "java.lang.OutOfMemoryError: Java yığın alanı" "-Xmx2500M" boyutundan daha az bir şey için istisnalar atar. Tek bir yürütme, çalıştırılmak için 5 saat sürer. Aynı denemeyi hem Mac'lerimde (iMac ve MacBook Pro) çalıştırdım ve bir saatten daha kısa bir sürede, "-Xmx1024" ile hata yapmadan çalıştılar. Küme işlerinde "-XX: MaxPermSize = 250M" gerekir, ancak Mac'lerimde varsayılanın üzerinde bir artış gerekmez. Her durumda tam olarak aynı kavanozları kullanarak aynı kodu, aynı girdileri çalıştırdım.Aynı program, aynı JVM, ancak farklı makinelerde çok farklı bellek gereksinimleri ve yürütme süresi - neden?
64 bitlik JVMs her durumda kullanılan (ve bildiğim kadarıyla bunlar oldukça benzer biliyorum gibi):
<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)
Ve anahtarlama, başlangıçta küme üzerinde Sunucusu kullanıyordu (her durumda Müşteri JVM çalıştırıyorum müşteriye fark yaratmadı). Ben java 7, aynı büyük bellek ve yürütme zamanı sorunları ile küme üzerinde çalışmayı denedim.
Ben tamamen şaşırdım, bunu açıklayabileceğim kimse konuşamadım. Daha önce buralarda biri var mı? Herhangi bir yardım büyük takdir!
Belki de -XX: + HeapDumpOnOutOfMemoryError ile bir yığın dökümü oluşturmalı ve sonra belleği ne kullandığını görmek için MAT veya benzerlerini kullanmalısınız. –
VisualVM veya YourKit gibi bir ticari bellek uzmanı kullanacağım. –
, bana iki farklı jvm sürümünüzün olduğu gibi görünüyor. Sorununuz olduğunu söylemiyorum ama katkıda bulunabilir. – Matt