SORU
16 Mart 2012, Cuma


Perl bellek kullanımı düşük tutmak için ipuçları

Bazı Perl programı bellek kullanımı düşük tutmak için önemli ipuçları nelerdir? Hafızam mümkün olduğunca düşük sistemleri Perl programları bağlı olarak ayak izi tutmak için nasıl öğrenme ilgileniyorum. Perl bellek kullanımı için önemli değil biliyorum, ama eğer iyileştirilmesi için herhangi bir ipucu varsa bilmek isterim.

Sen Perl komut dosyası daha az bellek kullanarak tutmak için ne yapabilir ki. Kod veya Perl farklı derlemek için nasıl için ipuçları yazmak için gerçek ipuçlarını olup, herhangi bir öneri ile ilgileniyorum.

Ödül için düzenleyin: Bir ağ uygulaması için bir sunucu olarak hizmet veren bir perl programı var. Buna bağlanan her istemci şu anda kendi alt süreç alır. De çatal yerine ipler kullandım, ama eğer çatal yerine iplikleri kullanarak aslında daha fazla bellek verimli olup olmadığını belirlemek mümkün olmamıştır.

Yine çatal yerine iplikleri kullanarak denemek istiyorum. Bellek kullanımı kurtarmak gerekir teoride inanıyorum. Bu konuda bir kaç sorum var:

  1. Threads Perl oluşturulan kopyalama modülü Perl kütüphaneleri engellerim her iş parçacığı için bellek?
  2. threads (iş parçacığı kullanan) en verimli yolu (veya sadece) Perl iş parçacığı oluşturmak için?
  3. Konuları, stack_size bir paramater belirttiğim, tam olarak ne bu değeri belirlerken Dikkat Etmeliyim ve nasıl etkiler bellek kullanımı?

Threads Perl/Linux ile, başına iş parçacığı için ayrı ayrı gerçek bellek kullanımı belirlemek için en güvenilir yöntem nedir?

CEVAP
16 Mart 2012, Cuma


Ne tür bir sorun haline kaçıyorsun, ve ne "büyük" ne demek? Bellek 200 Gb dosya yüklemek için ihtiyacınız olan arkadaşlarım var, iyi ipuçları anlayışları çok az VM dilim RAM 250 Mb acı için, Müşteri daha farklı bir bakış (gerçekten mi? Telefonumu daha fazlası) vardır.

Genel olarak, Perl eğer kullanmaya bile kullandığınız herhangi bir bellek tutar. Bir yönde optimize ederek, örneğin bellek, olumsuz bir etki olabilir, hız gibi olduğunu fark ettim.

Bu kapsamlı bir listesi (Programming Perl dahası da var)

☹ Perl bellek profil oluşturma araçları sorunlu alanları bulmak için. Profiling heap memory usage on perl programs How to find the amount of physical memory occupied by a hash in Perl? bkz

☹ En küçük kapsamlı yeniden kullanmak gerekmez zaman, bellek için Perl izin vermek için mümkün olduğunca sözcük değişkenleri kullanın.

☹ Büyük geçici yapılar oluşturmaktan kaçının. Örneğin, foreach Bir dosya okuma aynı anda tüm giriş okur. Eğer sadece gerekiyorsa onu satır satır, while kullanın.

 foreach ( <FILE> ) { ... } # list context, all at once 
 while( <FILE> ) { ... } # scalar context, line by line

☹ Bile bellekteki dosya olması gerek olmayabilir. Memory-map files instead of slurping them

☹ Büyük veri yapıları oluşturmak istiyorsanız, ihtiyacınız kadar DBM::Deep veya diğer depolama motorları diskte RAM ve en tutmak gibi bir şey düşünün.

☹ İnsanlar programı kullanmasına izin vermeyin. Bunu yaptığım zaman, 100% bellek ayak izi azalttım. Ayrıca destek istekleri azalır.

☹ Bir kopyası, böylece aynı bilgiyi iki kez saklamak olmasın diye referans metin ve büyük toplamları ... ... büyük bir kısmını geçirir. Eğer bir şeyleri değiştirmek istiyorum çünkü kopya varsa, sıkışmış olabilir. Bu yordam alt yordam bağımsız değişkenleri ve dönüş değerleri olarak her iki yönde gider:

 call_some_sub( \$big_text, \@long_array );
 sub call_some_sub {
      my( $text_ref, $array_ref ) = @_;
      ...
      return \%hash;
      }

☹ Modülleri, bellek sızıntıları izini. a module wasn't releasing memory bunu fark edene kadar bir uygulama ile büyük sorunlar vardı. Modülün RT sırada bir yer buldum, uygulamalı ve sorun çözüldü.

☹ Verileri bir kez büyük bir yığın işlemek gerekir ama kalıcı bellek ayak izi istemiyorsanız, bir alt süreç iş boşaltması. Alt işlem sadece çalışma sırasında bellek ayak izi vardır. Cevabı aldıktan sonra çocuk süreç kapanır ve belleği serbest bırakır. Benzer şekilde, iş dağıtım sistemleri, Gearman gibi makineler arasında iş dışarı yayılabilir.

☹ Yinelemeli olanları içine özyinelemeli çözüm çevirin. Perl kuyruk özyineleme optimizasyon yok, her yeni çağrı çağrı yığını ekler. Kuyruk sorunu kendiniz goto ile bir hile ya da bir modül ile optimize edebilirsiniz, ama bu bir sürü iş muhtemelen gerekmez tekniği üzerine asmak için.

☹ 6 Gb ya da yalnızca beş kullanmış? Aslında, tüm bu heyecan söylemem kendimi izlemek biraz kaybetti. Ama bu Perl, dünyanın en güçlü Dili ve hafızanı tamamen uçurur gibi, kendine bir soru sormalısın: kendimi şanslı hissediyor muyum? Peki, seni serseri?

Daha çok var ama saat çok erken, ne olduklarını anlamak hiç de zor değil. Mastering Perl Effective Perl Programming bazı koruyorum.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ipsy

    ipsy

    1 EKİM 2012
  • TimMinchinLive

    TimMinchinLi

    23 ŞUBAT 2009
  • Yo Mama

    Yo Mama

    18 EYLÜL 2005