[Linux-programlama] Re: Allowed Memory Size Of X Bytes Exhausted

---------

[Linux-programlama] Re: Allowed Memory Size Of X Bytes Exhausted

From: Atif CEYLAN <atifceylan_at_gmail.com>
Date: Mon, 25 Feb 2008 11:25:57 +0200
Message-ID: <47C289A5.3080003@gmail.com>

Necmettin Begiter wrote:
> 25 February 2008 Monday 10:25:26 tarihinde Bahri Meric CANLI şunları yazmıştı:
>
>> Merhaba
>>
>> Kod hakkında malesef detaylı bilgi veremiyorum fakat sonu olan bir döngü
>> (döngü sonsuz döngüye vs girmiyor) içerisinde benzer içerikli sayfaları
>> parsedip (parsetme işleminin bir bölümününde ereg fonksiyonun
>> kullanıyorum ) işlenmek üzere veritabanında yada text dosya da saklıyor.
>>
>> Liste bazen bir milyon üzerinde url den oluşabilimekte. Hedef sitelerin
>> sunucularının yavaşlığı yada fazla yük getirmemek için aralara delay
>> serpiştirmek de bazen gerekebilmekte. Bu sebeple kodun çalışma süresi de
>> uzamakta (php-cli ile çalışıyor).
>>
>> Durum kısaca bundan ibaret.
>>
>
> Basit bir örnek vereyim:
>
> pages = array()
> addresses = array("bir", "iki", "üç", "dört")
> saved = array()
> for (i=0;i++;i<len(addresses))
> {
> pages[i] = downloadpage(addresses(array))
> if ("@" in pages[i])
> {
> saved.append(array(addresses[i],pages[i]))
> }
>
> gibi bir betiğin (araya hafif Python karışmış olabilir;) hafızayı doldurması normaldir, tüm sayfaları hafızada tutmaya çalışıyor. Aynı betiği
> şöyle yazınca hafıza kullanımı ciddi olarak düşer:
>
> addresses = array("bir", "iki", "üç", "dört")
> saved = array()
> for (i=0;i++;i<len(addresses))
> {
> ourpage = downloadpage(addresses(array))
> if ("@" in ourpage)
> {
> saved.append(array(addresses[i],ourpage))
> }
>
> Burada saved yerine veritabanı veya bir dosya kullanırsanız daha da düşecektir. Sanırım benzeri bir durum var.
> _______________________________________________
> Linux-programlama mailing list
> Linux-programlama_at_liste.linux.org.tr
> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>
>
merhaba,
acaba döngü içerisinde bir yerde string birleştirme işlemi yapıyorda onu
sıfırlamıyor olabilir misiniz?

döngü
    yeni dosya oku
        döngü
           str.=str
        döngü sonu
    dosya işi tamam
döngü sonu

gibi. arkadaşarın yazdıklarına şiddetle katılıyorum. Eğer cok büyük
dosyaları komple belleğe alıp sonra bellek üzerinde compire, sort vs..
yapmıyorsanız o kadar bellek kullanılmasının ancak değişkenlerin
sıfırlanmaması sonucu oluştuğunu söyleyebilirim.
Daha önce bende milyonlarca satır pars eden uygulamalar yazdım ve php
ile bir yere kadar, sonrasında algoritmada değişiklik yapmadan C ye
geçtim dinamik bellek kullanımı vs.. sunucu inanılmaz rahatladı ve
neredeyse hiç denecek kadar bellek sarfiyatı ile işi götürüyorum şuan.
daha büyük bir avantaj olarak ciddi derecede hız farkı oluştu o da işin
cabası :)
php-cli yerine eğer imkanınız varsa betik olmayan bir dil ile yazmanızı
öneririm.
_______________________________________________
Linux-programlama mailing list
Linux-programlama_at_liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama
Received on Mon 25 Feb 2008 - 10:44:58 EET

---------

Bu arsiv hypermail 2.2.0 tarafindan uretilmistir.