SORU
13 EYLÜL 2008, CUMARTESİ


Nasıl Bellek Parçalanması çözmek için

Bazen uzun süre çalışan sunucu süreçleri (Windows Server 2003 üzerinde çalışan) bir istisna bellek ayırma hatası nedeniyle atılan indiği sorunları alıyoruz. Bizim şüphe ayırmalarını bellek parçalanması nedeniyle başarısız oluyor bu.

Bu nedenle, bize ve birisi bana iyi bir söyleyebileceğini umuyorum yardımcı olabilecek bazı alternatif bellek ayırma mekanizmaları bakıp duruyoruz.:

1) Windows Low-fragmentation Heap Kullanın

2) Firefox 3 olarak jemalloc -

3) Doug Lea malloc

Server sürecimiz geliştirilen herhangi bir çözüm ideal çapraz platform da olacak çapraz platform C kodu (*nix işletim sistemleri bu tür bir bellek parçalanması muzdarip?) kullanıyor.

Ayrıca, LFH şimdi varsayılan bellek olduğunu düşünerek Windows için ayırma mekanizması 2008 / Vista Server?... haksız mıyım Benim şimdiki sorunları "uzak müşterilerimizin sadece kendi server yükseltme eğer" os? gidecek

CEVAP
14 EYLÜL 2008, Pazar


İlk olarak, kaynak sızıntısı öneren diğer posterleri ile katılıyorum. Gerçekten ilk ekarte etmek istiyorum.

Umarım, şu anda kullandığınız yığın yöneticisinin gerçek toplam boş alan öbek (karşısında . mevcut dökümü için bir yol vardır ^strong>ücretsizblok) oluşmakta olan blok da toplam sayısı. Eğer ortalama serbest blok boyutu, yığın toplam boş alan kıyasla nispeten küçük ise, o zaman parçalanma sorunu var. Eğer büyük blok boyutu dökümü ve toplam boş alan ile karşılaştırın eğer alternatif olarak, bu aynı şeyi başarmak olacaktır. En büyük boş bloğu küçük toplam yüklü olmalıdırücretsizeğer parçalanma içine çalıştırıyorsanız alan tüm blok boyunca kullanılabilir.

Yukarıdaki konuda çok net olarak, her durumda söz ediyoruzücretsizöbek blok, öbek ayrılmış bloklar değil. Herhangi bir durumda, eğer yukarıdaki koşulları yerine getirilmesi değil, sonrayapınbir tür kaçak bir durum var.

Bir sızıntı dışladı sonra, daha iyi bir ayırıcı kullanarak düşünebiliriz.Doug Lea mallocsoru önerilir genel kullanım uygulamaları ve çok sağlam çok iyi bir ayırıcıenzaman. Başka bir deyişle, herhangi bir uygulama için en iyi çözüm bulmak için zaman test edilmiştir. Ancak, herhangi bir algoritma için idealdirtümuygulamalar ve herhangi bir yönetim algoritması yaklaşım tasarımı karşı doğru pathelogical koşullar tarafından kırılmış olabilir.

Neden parçalanma bir sorun yaşıyor musunuz?- Parçalanma sorunları kaynaklarıdırneden oldubir uygulama davranışını ve büyük ölçüde farklı ayırma ömürleri ile aynı bellek arenada var. Yani, bazı nesneler nesnelerin diğer türleri aynı yığın içinde uzun süre devam ederken ve düzenli olarak ayrılan serbest.....arena daha büyük alanlara dürtüyor ve böylece serbest bırakılmış bitişik blokların birleşim önlenmesi, uzun ömür olanları düşün.

Bu tür bir sorunu çözmek için yapabileceğiniz en iyi şey yaşam daha benzer olduğu mantıksal olarak alt alanlara öbek bölün. Sonuç olarak, geçici bir yığın ve kalıcı bir yığın veya benzer yaşam şeyler grup bu çok fazla istiyorsun.

Bazıları var önerilen bir diğer yaklaşım sorunu olan girişimi için tahsisat boyutları daha benzer veya aynı, ama bu daha az ideal çünkü yarattığı farklı bir tür parçalanma denilen iç parçalanma - etkisi, boşa alanınız ile ayrılırken daha fazla bellek bloğu daha çok ihtiyacın var.

Ayrıca, iyi bir yığın ayırıcı, Doug Lea, yapma blok boyutları daha benzer gereksiz çünkü ayırıcısı " işin gücün iki boyutu bucketing düzeni bu hale getirir tamamen gereksiz yapay ayarlamak ayırma boyutları geçirilen malloc() - etkisi, onun yığın yöneticisinin yaptığı için otomatik olarak çok daha sağlam daha uygulama mümkün olacak ayarlamalar yapmak.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dogbert files

    Dogbert file

    12 Ocak 2012
  • Schmittastic Jr.

    Schmittastic

    19 Mart 2013
  • Vsauce

    Vsauce

    30 Temmuz 2007