|
Php5 Script 'Fryseniveau' før udsejlingsdato
Jeg har for nylig opgraderet et system fra PHP 4.4.2 til PHP 5.2.1, og en af mine scripts er begyndt at opføre sig meget mærkeligt. Jeg har prøvet google, men kommer op blank hidtil.
Grundlæggende hvad scriptet gør, er at vælge en stor mængde data fra en mysql (4.1.21) database, skal du gøre nogle manipulation, de observationsområder en graf (ved hjælp jpgraph 2,2). Jeg fjernede alle jpgraph kode, og jeg er stadig at få problemet. Hvad sker er scriptet "hænger" i en periode efter fuldbyrdende sidste php kommando før faktisk exiting. I løbet af denne periode processen optager en stor del af CPU-tid (et helt enkelt processor meste), men hvis du spærfag processen får du ingen effekt, før det endelig exits (når du ser stdin / ud / fejle lukket etc).
Efter at forskellige debug erklæringer konstaterede jeg, at hvis jeg kommenterede de følgende linje scriptet ikke hænge før exiting.
$ datax \u003d $ newdatax;
Et ganske uskadeligt linje. På dette tidspunkt $ datax er en stor array (mange tusinde værdier lang), og $ newdatax en array med resultaterne fra parse det oprindelige $ datax på en eller anden måde (for det meste tale om at tage enhver Nth indrejse fra $ datax). På dette punkt, jeg ønsker at smide det oprindelige $ datax og erstatte det med den nye $ newdatax og jeg måtte ønske at gøre mere maniplulation senere.
Hvis $ datax er omkring 10.000 eller så rækker der er en mærkbar hænge når scriptet udgange på 50.000 rækker den hænge er over 20 sekunder. Under php 4 Jeg havde ingen problemer med denne kode, når der var over 200.000 rækker i array.
Selv hvis jeg bare ændre denne linje til
$ datax \u003d array ();
Jeg får lignende (men meget mindre) 'hænge' før scriptet udgange og $ datax array behov at være ret store, før det bliver mærkbar.
Systemet kører på Solaris 9 om en v480 med 4 processorer og 16GB RAM. Jeg har prøvet det med og uden Zend optimiser (v3.2.8) med nogen mærkbar forskel.
Enhver hjælp værdsat.
|