SORU
29 HAZİRAN 2009, PAZARTESİ


Java Başlatmak için Reddediyor - nesne yığın için yeterli alan yedek Olabilir

Arka plan

Yaklaşık 20 linux bıçaklar bir havuzu var. Bazı, bazı çalışan Suse Redhat çalışıyor. Aşağıdaki 3 klasörleri içeren NAS alanı paylaşmak:

  • /NAS/app/Java yazılım ve programları yükleme durumuna işaret eden bir sembolik bağ java. Şu anda sürüm 1.5.0_10
  • /NAS/app/ - bizim Uygulama Sürümü işaret eden bir sembolik bağ lib.
  • /NAS/veri - çıkış yazılı bulunduğu dizin

Tüm makinelerimiz 2 işlemci (hiper) fiziksel 4gb bellek ve takas alanı 4 GB. Biz limitli sayıda 'iş' her can makine sürecinde belirli bir süre için 6 (Bu sayının ihtiyacı değiştirin, ama yok içine girin mevcut sorun, bu yüzden bunu görmezden şimdilik).

Bazı görevler, 512mb, Diğerleri 2048mb Maksimum Öbek boyutu rezerv bazı Maksimum Öbek boyutu ayarlayın. Yine, eğer 6 işleri aynı makinede başladı varsa bizim bellek üzerinden gidebiliriz biliyoruz yığın boyutu 2048, ama bizim bilgi için ayarlanmış bu henüz ortaya çıktı.

Sorun

Bir kez ve bir İş aşağıdaki iletiyi hemen başarısız olur bir süre sonra

Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

Aynı makinede çok fazla işi aynı anda çalışan bu tebeşir kullandık. Sorun nadiren yeterli oldu (BELKİayda bir kez) sadece yeniden başlatmak istiyoruz ve her şeyin iyi olacağını.

Bu sorun son zamanlarda çok daha kötü bir hal aldı. 2048m maksimum öbek boyutu isteği olan işlerimizi hemen hemen her zaman başarısız ve birkaç kere tamamlamadan önce yeniden almak gerekir.

Bireysel makineleri için gitti ve bunları el ile yürütme aynı sonucu ile denedik.

Hata ayıklama

Sorun sadece SuSE bizim kutuları için var olduğu ortaya çıktı. Daha sık oluyordu neden daha fazla makine ekleme yaptık çünkü yeni olanlar SuSE.

< . 'cat /proc/version' SuSE kutuları bize ver:

Linux version 2.6.5-7.244-bigsmp (geeko@buildhost) (gcc version 3.3.3 (SuSE Linux)) #1 SMP Mon Dec 12 18:32:25 UTC 2005
< . 'cat /proc/version' RedHat kutuları bize ver:

Linux version 2.4.21-32.0.1.ELsmp (bhcompile@bugs.build.redhat.com) (gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-52)) #1 SMP Tue May 17 17:52:23 EDT 2005
< . p ^'- ' bize makineleri İKİ tür üzerinde aşağıdaki verir: . uname

UTC 2005 i686 i686 i386 GNU/Linux

Hayır işleri makine üzerinde çalışan diğer işler fazla bellek kullanıyor. Bu işlemler şu anda çalışan tümolabilirtoplam 100mb kullanıyor.

< . p ^'top' şu anda aşağıdaki gösterir:

Mem:   4146528k total,  3536360k used,   610168k free,   132136k buffers
Swap:  4194288k total,        0k used,  4194288k free,  3283908k cached
< . '' şu anda aşağıdaki gösterir: . vmstat p ^

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa
0  0      0 610292 132136 3283908    0    0     0     2   26    15  0  0 100  0

Eğer aşağıdaki komut satırı (1850mb Max Yığın) ile iş gidersek iyi başlar:

java/bin/java -Xmx1850M -cp helloworld.jar HelloWorld
Hello World

Biz 1875mb max yığın boyutunu yükseltmek eğer başarısız:

java/bin/java -Xmx1875M -cp helloworld.jar HelloWorld
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

Bellek kullanılmakta/Önbelleğe alma Arabelleği için son derece açık ve az görüntülenen yüzden 'özgür'. Anlamadığım şey, hiçbir şey daha yüksek Java başlayamaz anlamına geldiği büyülü 1850mb bir çizgi var.

Herhangi bir açıklama büyük mutluluk duyacağız.

CEVAP
29 HAZİRAN 2009, PAZARTESİ


32-bit işletim sistemi kullanıyorsun, bu nedeniyle toplam boyutunu, sınırlarını görmek olacaksın. Diğer cevapları daha detaylı olarak bu örtülü var, onların bilgileri tekrarlamaktan kaçınmak ederim.

Bir davranış olduğunu fark ettim ile sunucularımız yakın olduğunu belirten bir yığın büyüklüğü ile -Xmx süre belirtme minimum yığın boyutu ile -Xms yol açacak Java server VM hemen deneyen tahsis tüm bellek için gerekli maksimum yığın boyutu. Ve tabii, eğer bunu uygulama yığın boyutuna kadar gelirse, ihtiyacınız olan bellek miktarıdır. Ama şans, uygulamalarınızı kolay küçük kümeler ile başlayan olacakolabilirbir sonraki aşamada daha büyük yığın gerektirir. Ayrıca minimum yığın boyutunu belirtme küçük bir yığın uygulama ile başlayın ve yavaş yavaş bu yığın büyümeye izin verecek.

Tüm bu büyük yığın boyutunu artırmak yardımcı olacak değil, ama yardımcı olabileceğini düşündüm...

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BSA

    BSA

    9 NİSAN 2012
  • Eddie Bravo

    Eddie Bravo

    17 EKİM 2006
  • michal lelkowski

    michal lelko

    9 Temmuz 2006