Topic: Allowed memory size limit

Esmė daugiau nei paprasta. Vykdant script'ą, gaunu tokią klaidą:
"Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 9916 bytes) in /data/www/print/modules/News/News.module.php on line 672".
Ir situacija čia gaunas daugiau nei kuriozinė. Serverio limitas (bent kaip matom iš klaidos) scripto vykdymui - 16MB, tačiau iš klaidos matyt, kad buvo išnaudota kurkas mažiau. Kaip taip gali būt? kodėl meta tokią klaidą?
Eilutė, kurioj viskas vyksta, atrodo taip:
$new_img = imagecreatefromjpeg ( $_FILES[$fieldname]['tmp_name'] );
Taigi kaip ir nieko įpatingo. Gal būt įtakos daro tai, jog GD buvo atskirai įkompiliuotas (anlsčiau jo nebuvo). Net nežinau, aš pasimetęs. Serveris su nestandartiniais nustatymais, be kita ko dar ir ant windows platformos. gal reikia kažkokių spec nustatymų.
Man asmeniškai tokiu baikų niekad nebuvo, nors pats ir dirbdavau ant windows serverio.

Su sąlyga, kad šūdo nebus...

Re: Allowed memory size limit

Ramex wrote:

"Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 9916 bytes) in /data/www/print/modules/News/News.module.php on line 672".

(...)

Serverio limitas (bent kaip matom iš klaidos) scripto vykdymui - 16MB, tačiau iš klaidos matyt, kad buvo išnaudota kurkas mažiau. Kaip taip gali būt?

Viskas gerai, serverio limit'as yra 16Mb, o tau rašo, kad prie 16Mb dar bandė pasiimti papildomai 10k. Didink serverio limit'ą arba nenaudok operacijų (kaip šiuo atvejų paveiksliukų apdorojimas), kurios naudoja daug atminties.

Re: Allowed memory size limit

na nenaudot negaliu, teks durt į šikną servo adminui, kad didintų servo galimybes, nes ne toks projektas, kad galima būtų to atsisakyti =] dėkui už paaiškinimą.

Su sąlyga, kad šūdo nebus...

Re: Allowed memory size limit

tai paimk ir kesuok viska, o thumbnailsus galima padaryti tik tada kai issaugomas vienas ar kitas objektas. nuimsi daaaaug darbo nuo sistemos kai ji aptranaus lankytojus.

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: Allowed memory size limit

tai ten ir taip kešuojama =] o dėl thumbnailų, tai čia reikalinga admin funkcijai, kai jis kelia fotkes, kad padarytų sumažintą variantą + didele fotkę irgi sumažintų iki protinų ribų. čia ne mano problemos, sistema veikia kuo puikiausiai, nes ant kito servo nėra problemų. tik to servo adminas kažkoks keistas, o pakeist servo nėr galimybių, nes firma įnoringa.

Su sąlyga, kad šūdo nebus...

6 (edited by Ramex 2009-01-21 14:10:00)

Re: Allowed memory size limit

gerai, gal turit pasiūlyt kokių kitų minčių? nes limitas buvo padidintas iki 32MB bet gaunu tą pačią klaidą:
"Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 9916 bytes) in /data/www/print/modules/News/News.module.php on line 672"

keisti sistemos negaliu jokiais būdais, darbas seniai padarytas ir čia ne apie tai šneka. reikia kažkaip ištaisyti serverio darbą. limito pakėlimas nepadėjo. kokios kitos gali būti šito priežąstys?

Su sąlyga, kad šūdo nebus...

Re: Allowed memory size limit

gal reikia dar daugiau resursų? Kokio dydžio paveiksliukai yra įkėlinėjami?

žinai kiek užima 1-3Mb jpg jį išskleidus?

Galima naudoti išorinius įrankius paveiksliukams apdirbti, pvz imagemagic per komandinę eilutę ir pan.

O priežastys yra tokios, kad tavo script'as su duomenimis naudoja per daug atminties - sprendimas - naudoti mažiau atminties - atlaisvinti visą nenaudojamą atmintį (kintamieji, masyvai, objektai ir pan.).

Re: Allowed memory size limit

esmė yra tokia, kad čia naudojama sistema kuri patikrita ir ten nėra šiaip mano iš lempos parašytas kodas. ji naudota X kartų ir N skirtingų serverių ir niekad dėl foto apdirbimo nebuvo bėdu. įskaitant šitos pačios sistemos kopiją ant kito serverio. pats procesas paveikslėlio apdirbimo negali tiek užimti, nes viso labo jpg'o dydis buvo ~122kb abiem atvejais, tiek su 16MB limitu tiek su 32MB limitu. kaip matai klaidos pranešime tik tai ir pasikeitė. tad aš ir nesuprantu kodėl taip vyksta. nes atmintis buvo padidinta, bet niekas nesikeičia, juo labiau, kad ta sistema puikiai veikė kituose servuose su kurkas didesnėm fotkėm. ~2-3MB

Su sąlyga, kad šūdo nebus...

Re: Allowed memory size limit

gal servas neisvalo atminties .... siaip is tikro reikia pameginti unsetinti nereikalingus dalykus, gali ir padeti ... o gal bando i masyva susideti isskleistus paveikslelius ? :)

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: Allowed memory size limit

kaip jau anksčiau sakiau, klaida įvyksta kviečiant funkciją imagecreatefromjpeg() tad aš negaliu jos perrašyti ir padaryti savo paveikslėlio mažinimo funkcijos. taip pat ir prie serverio prisiliest negaliu. man tiesiog reikia iššiaiškinti, kodėl taip vyksta. nes niekur su tokia nesamone dar neteko susidurt. viskas prasidėjo nuo to, jog serve išvis nebuvo GD bibliotekos ir adminas ją instalino. gal jis ten kažką kreivai suinstalino, gal neatitinka php versijos. nes negali būt okia nesamone kad viena sušikta imagecreatefromjpeg funkcija surytų 32MB atminties su 122KB paveikslėliu, kai tuo tarpu visuose kituose serveriuose puikiai veikia ir su 3MB picture'ais

Su sąlyga, kad šūdo nebus...

Re: Allowed memory size limit

Ramex wrote:

kaip jau anksčiau sakiau, klaida įvyksta kviečiant funkciją imagecreatefromjpeg() tad aš negaliu jos perrašyti ir padaryti savo paveikslėlio mažinimo funkcijos. taip pat ir prie serverio prisiliest negaliu. man tiesiog reikia iššiaiškinti, kodėl taip vyksta. nes niekur su tokia nesamone dar neteko susidurt. viskas prasidėjo nuo to, jog serve išvis nebuvo GD bibliotekos ir adminas ją instalino. gal jis ten kažką kreivai suinstalino, gal neatitinka php versijos. nes negali būt okia nesamone kad viena sušikta imagecreatefromjpeg funkcija surytų 32MB atminties su 122KB paveikslėliu, kai tuo tarpu visuose kituose serveriuose puikiai veikia ir su 3MB picture'ais

Sakau, pabandyk 3Mb jpg nuotrauką užseivinti BMP formatu ir pažiūrėk kiek jis sveria. imagecreatefromjpeg() nuskaitydama jpg'ą jį saugo atmintyje nesuspaustu formatų, kuris praktiškai atitinka BMP. Kodėl kituose serveriuose veikia puikiai tai pasižiūrėk koks ten atminties limitas (per php.ini). Taip pat gali skirtis tiek versijos tiek kiti dalykai. Plius jeigu kalbi apie serverį, kuris tipo veikia ant windowsu tai čia jau gali būti viena iš problemos dalių, nes windowsai, kad ir kokie jie bebūtų, normaliems serveriams netinka .....

Beto, pasikartosiu, bet tavo scriptas gali naudoti ir šiaip atminties, kuri tau tam tikroje scripto vietoje ir nereikalinga. Pabandyk prieš minėtos funkcijos eilutę parašyti:

echo memory_get_usage() , " baitai jau naudojami.";

12 (edited by Ramex 2009-01-21 16:06:15)

Re: Allowed memory size limit

nežinau kaip čia paaiškinus kad mane suprastumėt.

Bėda yra serveryje ir ją reikia spręsti būtent per serverio parametrus, nes paparasčiausiai aš neturiu priėjimo prie to servo ir negaliu keisti nei kodo, nei bandyt debugint ar panašiai. kadangi sistema veikia puikiai kitur, tai man reikia sužinot kas tai gali lemt (kalbant apie servo nustatymus). pradžioj buvo taip, kad nebuvo GD. ok, įdėgė. dabar toks fokusas. padidino iki 32MB. aš pilnai tikiu, kad padidinus iki 128 ar 256 MB leistu ir didesnes fotkes kelt (nes 2KB jpg'ą man visgi įkėlė), bet patys suprantat kad tiek tikrai niekas nekels. tad esminis klausimas:
Ką tie windows'ai daro su savo prakeikta atmintim, kad jos neužtenka. ir kokie servo nustatymai reikalingi, kad jų užtektų?

Su sąlyga, kad šūdo nebus...

Re: Allowed memory size limit

Ramex wrote:

Bėda yra serveryje ir ją reikia spręsti būtent per serverio parametrus, nes paparasčiausiai aš neturiu priėjimo prie to servo ir negaliu keisti nei kodo, nei bandyt debugint ar panašiai

Jeigu negali keisti php scripto - vadinasi turi didinti memory_limit'ą.

Ramex wrote:

kadangi sistema veikia puikiai kitur, tai man reikia sužinot kas tai gali lemt (kalbant apie servo nustatymus)

Tai pasidaryk tokį patį serverį. Bent jau parametrus pažiūrėk, koks ten memory_limit'as?

Ramex wrote:

pradžioj buvo taip, kad nebuvo GD. ok, įdėgė. dabar toks fokusas. padidino iki 32MB

Tai kai nebuvo jokio GD tai spėju niekas nuotraukų ir neįkėlinėjo. Su 16 ar 32Mb tai žinok net nuotraukų nereikia įkėlinėti, užtenka standatinio cms'o, daugiau duomenų, kokio nors xml parsinimo, neefektyvaus operatyvinės atminties naudojimo script'e, kad jos neužtektų. Gal tiesiog iki tol tas script'as valgė 14mb nieko rimto neveikdamas.

Ramex wrote:

aš pilnai tikiu, kad padidinus iki 128 ar 256 MB leistu ir didesnes fotkes kelt (nes 2KB jpg'ą man visgi įkėlė), bet patys suprantat kad tiek tikrai niekas nekels.

Tai padidink iki 64Mb ir nebus problemų, tol kol kas nors nesugalvos įkėlinėti 20Mb nuotraukos ir susidurs su kitais apribojimais (pvz failo dydžiu ir pan.).

Ramex wrote:

Ką tie windows'ai daro su savo prakeikta atmintim, kad jos neužtenka. ir kokie servo nustatymai reikalingi, kad jų užtektų?

Esmė tame, kad php ir gd nėra gaminti, kad veiktų ant windowsų. Windowsinės versijos yra daugiau-mažiau adaptuotos linuxinės versijos. Operacinės sistemos iš esmės skiriasi, ir niekas ten labai nededa didelių pastangų kur nereikia. Todėl visokie moduliai gali dirbti mažiau efektyviau negu ten, kur jie pakankamai gerai ištestuoti ir specialiai vystomi. Todėl pirma problema pas tave ir yra, kad tu vartoji termina "windowsinis serveris", kurį man sunku suvokti (aš čia nekalbu apie M$ produktus).

Re: Allowed memory size limit

o kiek yra panaudota pries ivykdant funkcija?


beje vienam forume radau viena is variantu:

Please check in your "php.ini" file, that your "safe mode" configuration is "off":

safe_mode = Off

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: Allowed memory size limit

na čia ir yra cms'as. jis veikia irgi puikiai išskyrus tą nuotraukų įkėlimą. identiška jo kopija tiek failų, tiek DB duomenų atžvilgiu ant linux veikė kuo puikiausiai. Su 16MB apdorojo 3-4MB jpg'us. ir man tiesiog reikia sužinot, ką man pasakyt tam adminui, kad jis padarytų, kad svetainė veiktų.

svetainė buvo seniai padaryta, pinigai sumokėti. bet kai atėjo laikas ją įkelti į serverį, klientas pareiškė, kad reikia kelti į jų nuosavą serverį kuris sukasi ant Windows platformos. ir aš nežinau ar ten ten Windows Server 2003, ar home maded server for Windows Xp,  ir manau čia mažai esmės yra. apie serverius aš išvis mažai išmanau, nes aš ne sysadminas. man pirmą kartą tokia situacija. aš jam pasakiau, kad pakeltu atmintį iki 32MB (kartą tokia situacija buvo ant linux serverio, bet ten buvo tiesioginis failo apdorojimas ir atminties pakelimas man padejo, nes aš tiksliai žinojau kur bėda), bet tai nepadaėjo. tai klausimas, ar pades, jei pakels iki 64MB ar dar daugiau ir ar tai nebus grobuoniška serverio požiūriu.

Su sąlyga, kad šūdo nebus...

Re: Allowed memory size limit

zygis wrote:

o kiek yra panaudota pries ivykdant funkcija?


beje vienam forume radau viena is variantu:

Please check in your "php.ini" file, that your "safe mode" configuration is "off":

safe_mode = Off

sakau aš neturiu priėjimo prie failo redagavimo. aš galiu tikrint kaip viskas veikia analogiškai linux serveryje, kaip šita problema rodo tai tas naudos neduos, nes viskas skiriasi žiauriai. as tikrai net negaliu pažiūrėti kokie ini parametrai užsetinti yra. klausdamas aš tikėjaus kad jūs konkrečiai žinosit, gal kam teko susidurt. nu aš toliau dulkinsiu adminą ir aiškinsiuos su juom. nes viską apsunkina tai, kad neturiu priėjimo prie servo, o tas adminas paranojikas.

Su sąlyga, kad šūdo nebus...

Re: Allowed memory size limit

Labai kažkaip nelogiškai viskas man atrodo...

Jeigu aš neturėčiau jokio priėjimo prie serverio tai tą problemą palikčiau spręsti tiem, kas tą priėjimą turi. Arba pasakyčiau adminui, kad padidinti memory_limit iki 64Mb. Viskas.. jeigu nori daugiau kažką sužinoti tai reikės ir daugiau galimybių. šita "problemą", jeigu ją taip galima pavadinti, tai daug kas turėjo, bet aš jau paaiškinau, kokiais būdais ji sprendžiama. (-;

Re: Allowed memory size limit

Ramex wrote:

o tas adminas paranojikas.

ko noret gi ant windozes sedi :D

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer